摘要:在對C語言進行編程時候,常常需要使用memset等函數進行數組或者結構體的初始化,然後這是一把雙刃劍,很容易引發意想不到的bug。本文主要解析memset系列函數的使用陷阱。
有如下的代碼:
int a[100],int *b=a;
自己去測試一下,找到答案吧。
結論:sizeof不是一個函數,返回值是sizef_t,表示元素所占用字節的大小。另外需要注意,它是一個無符號類型。
有如下代碼:
int a[100]; memset(a,0,100);
面試中有一個經典問題:編程實現memcpy函數,它的函數原型如下:
void *memcpy(void *dest, const void *src, size_t n);
注意內存重疊問題與空指針問題,n傳入負數問題。
本文不給出答案,讀者可以自己編寫然後與標准庫中的函數進行對照。