memset的用法

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]<<"\t";
    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]<<"\t";
    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));

 

posted @ 2015-12-25 16:02  dongyanxia  阅读(475)  评论(1编辑  收藏  举报