读书人

惑!memset初始化字符串 零 0x00 的区

发布时间: 2013-01-17 10:28:54 作者: rapoo

惑!!!memset初始化字符串 0 0x00 的区别
char str[100];

memset(str,0x00,sizeof(str)); /*16进制的0*/

memset(str,0,sizeof(str)); /*10进制的0*/

看老鸟们很多都写16进制的。

但我是用10进制的也没有发现什么问题啊?

请各位高人指教!

谢谢!
[解决办法]
0x00在常量区里占1个字节,
0在常量区里占sizeof(int)个字节。
虽说memset(str,0,sizeof(str)); 时,会只保留0的低8位,结果一样。
但用0x00确实是一个好习惯,它体现了一个程序员对于移植性的意识。
[解决办法]

引用:
我刚刚做了一个实验
环境:AIX 6.1 , CC
代码如下:

C/C++ code

+1 #include <stdio.h>
+2
+3 int main(){
+4 struct test{
+5 int a;
+6 char ……


怎么会输出a呢?我测试的输出结果都是0

int main(){
struct test{
int a;
char b;
};

struct test c;
c.a = 1;
c.b = 'a';
memset(&c,0x00,sizeof(c));
/* memset(&c,0,sizeof(c));;*/

printf("%c,%d\n",c.b,c.a);
system("pause");

}

[解决办法]
我擦,楼主怎么测试的,什么操作系统,什么编译工具
还有 memset(c,0,sizeof(c));应该是
memset(&c,0,sizeof(c));吧

读书人网 >C语言

热点推荐