C/C++經常使用函數易錯點剖析。本站提示廣大學習愛好者:(C/C++經常使用函數易錯點剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C/C++經常使用函數易錯點剖析正文
本文簡略剖析了C/C++中經常使用函數的易錯點,包含memset、sizeof、getchar等函數。分享給年夜家供年夜家參考之用。詳細剖析以下:
1.memset
#include <string.h> void* memset( void* buffer, int ch, size_t count );
將內存中buffer的前count個字節的內容全體設置為ch指定的ASCII值.常常用來初始化數組.復制時以字節為單元,假如buffer是int long,或許其他類型的指針時,須要留意紛歧定為數組的年夜小,應當是為 數組年夜小*sizeof(類型).推舉直接應用:
sizeof(buffer)//buffer是數組
2.sizeof
前往類型年夜小,以字節為單元.
對數組和指針是分歧的.
int *p=new int[5]; int q[5]={0}; cout<<sizeof(p)<<endl; cout<<sizeof(q)<<endl; delete[] p;
輸入值是分歧的.(64位機械測試)
sizeof(p):p為指針,輸入的是指針類型的年夜小,64位上64/8=8
sizeof(q):q為int類型的數組,輸入的是數組所占字節數.4*5=20.
3.getchar
#include <stdio.h> int getchar( void );
這裡getchar前往的是整形而不是char,若湧現上面代碼.
char c; while((c=getchar())!=EOF) { XXX }
這裡c是被截斷int類型的一部門,c能夠沒法容下一切字符,特殊是EOF.
湧現成果的能夠,
1)某些字符截斷後與EOF雷同,招致法式在運轉時正常終止
2)墮入逝世輪回
3)有些編譯器確切對c停止了截斷處置,然則比擬時,比擬的 是getchar的前往值與EOF,招致法式看似"正常運轉"
願望本文所述對年夜家的C/C++法式設計有所贊助。