memset函數詳細說明;void *memset(void *str, int c, size_t n);
該函數功能:将str 指向的某一塊記憶體中的每個位元組的内容全部設定為c 指定的ASCII值,塊的大小由第三個參數n 指定,該函數通常為新申請的記憶體做初始化工作。
該函數作用:為已開辟記憶體空間str 的前n 個位元組的值設為值c (給申請的空間初始化)。
該函數包含在string.h頭檔案(C language),cstring或string.h(C++ language).
memset函數執行個體:
void fmemset() {
char strbuf[] = "與冰雪博弈,同時間賽跑!\n";
printf("fmemset strbuf: %s\n",strbuf);
memset(strbuf,'*',sizeof(strbuf));
//printf("fmemset memset( ,'*' , )after strbuf:%s\n",strbuf);
memset(strbuf, 0, sizeof(strbuf));
printf("fmemset memset( ,0, ) after strbuf:%s\n", strbuf);
}
注意:在使用memset函數時,不可将char* str 字元串類型的變量初始化,因為字元串資料内容儲存于隻讀存儲區,其内容不能被随意更改。
memcpy函數詳細說明:void *memcpy(void *strbuf,const void *str,size_t n);
該函數功能:将str 位址處的内容拷貝n個位元組的資料至目标位址strbuf指向的記憶體中,函數傳回指向strbuf的指針。
該函數作用:将str中的内容拷貝至strbuf中。
memcpy函數執行個體:
void fmemcpy() {
char* str = "有朋自遠方來,不亦樂乎!";
char strbuf[30];
memset(strbuf, 0, sizeof(strbuf));
memcpy(strbuf, str, sizeof(strbuf));
printf("fmemcpy memcpy( , , ) after strbuf:%s\n",strbuf);
}
注意:char a[20],b[10]; memcpy(b,a,sizeof(b));如果函數memcpy的第三個參數使用sizeof(a),則會造成b的記憶體溢出。[VS2013 報錯:Run-Time Check Failure #2 - Stack around the variable 'b' was corrupted.]
與memcpy函數類似的strcpy函數:memcpy函數是記憶體拷貝,可以使用該函數拷貝任何資料類型的對象,并可以指定拷貝的資料長度;strcpy函數隻能拷貝字元串,該函數至“\n”就結束拷貝,例如:char a[20],b[10];strcpy(b,a);該函數執行時,要注意a中字元的長度(第一個'\0'之前)是否超過10位,如果超過則會造成b 的記憶體溢出,[緩沖區溢出,(輕)程式崩潰,(重)系統癱瘓;VS2013 報錯:Run-Time Check Failure #2 - Stack around the variable 'b' was corrupted.]。