C/C++ memset使用
生活随笔
收集整理的這篇文章主要介紹了
C/C++ memset使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
memeset 作用是將一段內存的數據全部設置為指定值,函數原型為:
void *memset(void *dest,int c,size_t count);頭文件:
??使用時引入<memory.h>頭文件
作用:
??將dest指針指向的內存區域的前count個字符設置為c,并返回指向這個存儲區的指針。
注意點1:memset按字節初始化內存區域
memset按字節對存儲區進行初始化,所以參數c實際有效的只有低八位(即實際只取0~255),如下所示a與b設置為了相同值。
char a = ' ';char b =' ';memset(&a,65,1);memset(&b,65+256,1);正因如此,使用memset對int類型數組進行初始化時一般只能賦為0或-1(二進制碼全0或全1),因為int類型占四字節,而memset是將內存區域的每一個字節設置為c的低八位。比如以下這種情況,a[0]~a[3]被設置為16843009,即0x01010101,int類型占四字節,每一字節都被設置成了0x01.
int a[] = {1,2,3};memset(a,1,12);for(int i=0;i<=2;i++)printf("%d ",a[i]);注意點2:count設置
- 若使用數組名可以使用sizeof()獲取長度
- 當用數組名作為函數參數時,實際上傳遞的是一個指針,使用sizeof()只能獲得指針變量的大小,32位機為4字節,64位機為8字節。這時應當把數組大小作為參數傳遞,如以下代碼中再64位系統下,只能將a[0]和a[1]設置為-1.
- 注意對字符串初始化時可能會覆蓋字符串結束符’\0’,導致printf(“s”)不能正確輸出。printf(“%s”)會將目標區域的每一個字節按照字符類型輸出,直至遇到字符串結束符。C/C++中,使用雙引號定義字符串變量會在末尾自動追加結束符。如下所示,會輸出8個A和亂碼,因為字符串結束符被覆蓋掉了。
總結
以上是生活随笔為你收集整理的C/C++ memset使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PLC基本原理
- 下一篇: 内存函数:memcpy、memmove、