1. void *memset(void *s, ch, size n); //将指针s所指向的内存的前n个字节置为ch
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <cstring> using namespace std; void char_memset() { char a[5]; memset(a,'1',sizeof(char)*5); cout<<"function char_memset:"<<endl; for(int i=0;i<5;i++) cout<<a[i]<<" "; cout<<endl; } void int_memset() { int a[5]; memset(a,1,20); //memset(a,1,sizeof(int)*5); //memset(a,1,sizeof(a)); cout<<"function int_memset:"<<endl; for(int i=0;i<5;i++) cout<<a[i]<<endl; } int main(int argc, _TCHAR* argv[]) { char_memset(); int_memset(); system("pause"); return 0; }
因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。
而第二个程序a是整型的,使用 memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。
运行结果如下:
注意:int_memset()函数中,这三句是等效的,注释掉的两句和memset(a,1,sizeof(a)),都是20字节的空间。
void int_memset() { int a[5]; //memset(a,1,20); //memset(a,1,sizeof(int)*5); memset(a,1,sizeof(a)); cout<<"function int_memset:"<<endl; for(int i=0;i<5;i++) cout<<a[i]<<endl; }
void char_memset() { unsigned char a[5]; memset(a,1,sizeof(char)*5); cout<<"function char_memset:"<<endl; for(int i=0;i<5;i++) cout<<(int)a[i]<<" "; cout<<endl; }
2. 用memset进行内存清零是没有问题的,即使它是按字节进行操作,如上面代码中:
void int_memset() { int a[5]; memset(a,0,sizeof(int)*5); cout<<"function int_memset:"<<endl; for(int i=0;i<5;i++) cout<<a[i]<<endl; }
3. memset() 函数常用于内存空间初始化。
char str[20]; memset(str,0,20);
4. 方便清空一个数组或者结构类型的变量。
typedef struct stu { char name[20]; int age; int id; }STU; STU student_a; STU stu[10]; memset(&student_a,0,sizeof(STU)); memset(&stu,0,10*sizeof(STU));