在c語言程式設計中,memset函式的定義是
void* __cdecl memset(
_out_writes_bytes_all_(_size) void* _dst,
_in_ int _val,
_in_ size_t _size
);
即把_dst當前位置後面的_size個位元組全部設定為 _val的ascii值, 並返回 指標_dst。
一般的用法是
int a[5] = ;
memset(a, 0, sizeof(a));
for (int i = 0; i < 5; i++)
會把陣列a的五個值都置為0;
但是要注意memset函式是按位元組賦值,所以並不能把陣列全賦值成任意的乙個值,例如如下**就有陷阱:
int a[5] = ;
memset(a, 1, sizeof(a));
for (int i = 0; i < 5; i++)
不了解memset函式的人可能會認為把a陣列的五個值都置為了1,但是前面說到memset函式是按位元組賦值
,int型的變數是四個位元組,共32位,所以會把a[0]-a[4]置為
00000001,00000001,00000001,00000001,熟悉計算機體系結構的人會知道計算機表示數是以補碼的形式,該數的值為1+2^8+2^16+2^24=16843009,並不是1!
如果要對陣列賦除了0和-1之外的數字,建議用fill()函式。
C STL VC fread函式的陷阱
如果想實現從某個檔案中一次次n個位元組般讀出來,那建議不要用 read fread buff,n,1,data file 因為就算當檔案的位元組數比n大,但這時strlen buff 絕不是n個位元組大小!也不是read個位元組大小!查幫助文件,可知,read是指成功讀入的單元塊數,這裡對應的就是,...
虛函式的「陷阱」
首先要說明,我不是乙個理論派,很少努力的閱讀課外書籍,只是用到的時候才去找。因此理論上有缺失,導致對本文出現的 陷阱 認識不足。當然,對於一些專業知識比較強的朋友來說,這不是 陷阱 只是對我當前的知識水平而言。先舉個例子吧,更好說明情況。假設有兩個類,有兩個虛函式。if defined father...
GetTickCount 函式的陷阱!
開發中經經常使用gettickcount 函式來進行間隔時間的推斷。如推斷某一段 執行花了多少時間等,使用比較方便。可是僅僅針對尋常的一些測試。近期開發乙個服務程式時,也在 中用gettickcount 來進行推斷,大體格式例如以下 dword dwbegin 0 void thread run v...