memset函数

参考:http://www.cnblogs.com/lebronjames/archive/2010/07/04/1770987.html

1. 用法

    void *memset(void *s, int ch, unsigned n);

    使用时要声明头文件: #include <string.h>

2. 功能

    将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数n决定。这个函数通常为新申请的内存做初始化工作,其返回值为指向S的指针。

3. 示例

1)将字符串的内容全部变为‘*’

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;


int main()
{
    char buffer[]="hello world\n";
    printf("Buffer before memset:%s\n",buffer);
    memset(buffer,'*',strlen(buffer));
    printf("Buffer after memset:%s\n",buffer);

    return 0;
}

输出结果为:

2)对非字符型数组进行处理,一定要注意memset是对每个字节进行填充

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;


int main()
{
    int num[5]={1,2,3,4,5};
    for(int i=0;i<5;i++)
        printf("%d ",num[i]);
    printf("\n");
    memset(num,0,5*sizeof(int));
    for(int i=0;i<5;i++)
        printf("%d ",num[i]);
    printf("\n");
    memset(num,1,5*sizeof(int));
    for(int i=0;i<5;i++)
        printf("%d ",num[i]);
    printf("\n");

    return 0;
}

输出结果为:

由于memset是以字节为单位对数组进行填充,因此当填充值为0时,数组每个int元素都为0;当用1进行填充时,int变量一共4个字节,每个字节都用1的ASCII值(00000001)填充,合在一起就是00000001000000010000000100000001,等于16843009。

因此,如果用memset对非字符型数组进行初始化要非常谨慎,可以进行清0处理。

posted on 2016-04-03 11:51  summerkiki  阅读(200)  评论(0编辑  收藏  举报