memset的进一步理解

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去试图改变只读内存的内容,这一点也要特别注意!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值