memset函式用法及注意事項

2021-06-16 07:04:23 字數 805 閱讀 1234

memset 函式是記憶體賦值函式,用來給某一塊記憶體空間進行賦值的。

其原型是:void* memset(void *_dst, int _val, size_t _size);

使用時在檔案頭加上#include "stdlib.h" 。

_dst是目標起始位址,_val是要賦的值,_size是要賦值的位元組數 。

例1:char str[9];

我們用memset給str初始化為「00000000」,用法如下

memset(str,0,8);

注意,memset是逐字節 拷貝的。

下面再看乙個例子:

例2:int num[8];

我們用memset給str初始化為,

memset(num,1,8);//這樣是不對的

乙個int是4個位元組的,8個int是32個位元組,所以首先要賦值的長度就不應該為8而是32。

因為memset是 逐字節 拷貝,以num為首位址的8位元組空間都被賦值為1,

即乙個int變為0x00000001 00000001 00000001 00000001,顯然,把這個數化為十進位制不會等於1的。

所以,在memset使用時要千萬小心,在給char以外的陣列賦值時,只能初始化為0或者-1。因為在計算機裡,0的二進位制都是0,-1的二進位制都是1。

最近才發現memset的這個問題,之所以要寫這篇文章,是因為我在自己的des演算法裡多處用到了memset,而我當時卻不知memset有這個問題,特此記下,引以為鑑。

例如:#include "stdio.h"

#include

int main() 結果

memset函式注意事項

memset 函式是記憶體賦值函式,用來給某一塊記憶體空間進行賦值的。其原型是 void memset void dst,int val,size t size 使用時在檔案頭加上 include stdlib.h dst是目標起始位址,val是要賦的值,size是要賦值的位元組數。例1 char ...

fscanf函式用法及注意事項

fscanf.c this program writes formatted data to afile.it then uses fscanf to read the various databackfromthefile.include file stream intmain void 注意事項...

memset使用注意事項

linux下的原型宣告 name memset fill memory with a constant byte synopsis include void memset void s,int c,size t n description the memset function fills the ...