码迷,mamicode.com
首页 > 其他好文 > 详细

memset的用法

时间:2015-12-25 17:00:30      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

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));

 

memset的用法

标签:

原文地址:http://www.cnblogs.com/dongyanxia1000/p/5076209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!