本文簡單分析了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++程序設計有所幫助。
新聞熱點
疑難解答
圖片精選