memset()的错误认识

汗,以前一直以为可以

 int a[10];
memset(a, 1, sizeof(a));

今天才发现,这是一个天大的错误,自己以前居然没有意识到~~~
事情追溯到今天下午做ACM题,想全部置1,结果发现输出的是怪数字。纳闷之下百度一查,石破天惊~~~
这里把原因说下:
先看了MSDN:
我不明白为何在给出的格式中有int出现,但是Remarks明确指出了:
Sets the first count characters of dest to the character c

其实这都不是重点,重点就是理解为何是这样:
memset是一个字节一个字节的设置.

把一个int的每个字节都设置为1,也就是0x01010101,十进制就是16843009
而在全部置0或者-1就没事。这是因为:
设置为0 就是0x00000000
设置-1就是FF,所以每个字节都置为-1就是0xFFFFFFFF,还是-1。
这也是为何可以置0和置1的原因。

如果想全部置1,只需用for即可。

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《memset()的错误认识》有2个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注