c格式符用來輸入單個字元(scanf()函式)。
char ch;
scanf("%3c",&ch);
如果從鍵盤連續輸入3個字元「abc」,由於ch只能容納乙個字元,系統就把第乙個字元'a'賦給字元變數ch。
果真如此麼?考察一下下面的**
#include
#include
int main( void )
執行的結果是:
最初__ch,_ch,ch為err
輸入3個字元:abc
最後__ch,_ch,ch為cba
請按任意鍵繼續. . .
不難發現,輸入的abc三個字元都被寫入了記憶體。意外地改變記憶體中的資料,這是非常危險的事情。就如同
int *p ;
*p = 3 ;
一樣凶險。
事實上,scanf()函式中的%c並非是用來輸入單個字元的,而是用來輸入一組字元的。例如
char c_a[3];
scanf("%3c" , c_a );
其中的3規定了輸入資料的寬度。
當然,寬度為1的時候,%c確實可以用來輸入單個字元。但是認為%c這個格式轉換只是「用來輸入單個字元」卻是大錯特錯,而且可能會產生乙個很嚴重的潛在的bug。
乙個凶險的BUG
c格式符用來輸入單個字元 scanf 函式 char ch scanf 3c ch 如果從鍵盤連續輸入3個字元 abc 由於ch只能容納乙個字元,系統就把第乙個字元 a 賦給字元變數ch。果真如此麼?考察一下下面的 include include int main void 執行的結果是 最初 ch...
微軟的乙個BUG
各位,我不知道我的這個發現屬不屬於微軟的乙個bug round 1.225,2 1.23 round 1.245,2 1.25 round 1.265,2 1.26 round 1.285,2 1.28 按照技術文章上說的,vb中round 函式屬於四捨五入函式,但實際執行當中,其實round 函式...
乙個微妙的bug
都知道不同型別運算元進行運算時,發生的轉換,資料型別一般朝著浮點度更高,長度更長的方向轉換,但signed 向unsigned 轉換得多多注意了,有如下 includeint a define cd sizeof a sizeof int sizeof 還回值為unsigned int main 最...