memset的进一步理解

来源:互联网 发布:深圳数控车床编程招聘 编辑:程序博客网 时间:2024/05/01 21:28

memset原型为:

extern void *memset(void *buffer, int c, int count);

用于把buffer所指的内存区域的前count个字节设置成字符,常用来初始化数组。使用时有两点需要注意:

1、其对内存的设置是按照字节进行的:举例说明

#include <stdio.h>
#include <string.h>
int main()
{
    int a[5];
    int i;
    memset(a,0,sizeof(a));
    for(i=0;i<5;i++)
       printf("%d ",a[i]);
    return 0;
}

上述代码将完成对数组a的初始化,所有元素为0

但如果将memset(a,0,sizeof(a));中的0改为1即memset(a,1,sizeof(a)),将出现问题,屏幕显示为:16843009 16843009 16843009 16843009 16843009,原因就是该函数对内存的设置是按字节进行的,我用的环境int类型为四个字节,因此它将1依填入每个字节,也就成了这种形式000000010000000100000001,它正好是16843009,应该注意这种情况

2、不要去试图改变只读内存,下面看代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char *s="Hello World!";
    memset(s,'G',5);//这里有问题
    printf("%s",s);
    return 0;
}
这段代码根本就运行不起来,原因就是memest去试图改变只读内存的内容,这一点也要特别注意!

原创粉丝点击