首页 > 其他 > 详细

memset的一些坑

时间:2020-11-05 22:29:01      阅读:42      评论:0      收藏:0      [点我收藏+]

memset是一个C标准库函数,在string.h中

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

函数解释:将s中当前位置后面的n个字节用 ch 替换 ,返回s。

坑点:

替换时是按照单个字节赋值的。

也就是说每个字节是用取出ch的低字节,进行赋值。

对于int数组,比如int a[5]赋值memset(a,-1,sizeof(int )*5)与memset(a,511,sizeof(int )*5) 所赋值的结果是一样的都为-1;因为-1的二进制码为(11111111 11111111 11111111 11111111)而511的二进制码为(00000000 00000000 00000001 11111111)后八位都为(11111111)。

所以一般只用0和-1作为ch,不用其他值。

对于char数组,也是同理。

 

实验1:

int main(int argc, char *argv[])
{
int a[10];
memset(a, 2, sizeof(a));
int i;
for (i = 0; i< sizeof(a)/sizeof(a[0]); i++)
printf("%d\n", a[i]);
return 0;
}

发现a[i]的值都是33,686,018。

而33,686,018的二进制正是0000 0010 0000 0010 0000 0010 0000 0010.也就是4个0000 0010(也就是十进制的2)拼接起来。

 

实验2:

int main(int argc, char *argv[])
{
char a[10];
memset(a, ‘2‘, sizeof(a));
int i;
for (i = 0; i< sizeof(a)/sizeof(a[0]); i++)
printf("%c\n", a[i]);
return 0;
}

输出一堆2

 

memset的一些坑

原文:https://www.cnblogs.com/gagaein/p/13934004.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!