一、memset()函数原型
将buffer所指向的某一块内存中的前count个字节的内容全部设置为c指定的ASCII值
extern void *memset(void *buffer, int c, int count)
{
const unsigned char uc = c;
unsigned char *su;
for(su = buffer;0 < count;++su,--count)
*su = uc;
return buffer;
}
buffer:为指针或是数组,
c:是赋给buffer的值,
count:是buffer的长度.
二、函数使用
memset可以清空一个结构体
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
struct sample_strcut stTest;
memset(&stTest,0,sizeof(struct sample_struct));
如果是数组:
struct sample_struct TEST[10];
memset(TEST,0,sizeof(struct sample_struct)*10);
三、注意
1. memset是以字节为单位初始化内存块。
char data[10];
memset(data, 1, sizeof(data)); // right
memset(data, 0, sizeof(data)); // right
int data[10];
memset(data, -1, sizeof(data)); // right
memset(data, 1, sizeof(data)); // wrong, data[x] be 0x0101
2. 当结构体中包含指针时,在使用memset时需要小心。
struct Parameters {
int* p_x;
};
Parameters par;
memset(&par, 0, sizeof(par));
当memset初始化时,会把p_x指针本身设置为0。
3.这里的memset是多余。
char buffer[20];
memset(buffer,0,sizeof(char)*20);
strcpy(buffer,"123");
//以下并不多余
memset(buffer,0,sizeof(char)*20);
memcpy(buffer,"123",3);