memset函数的思考?

为什么一定要在定义了一个存储数据的区域后要用memset初始化这个区域呢?
如:char s[30];
memset(s, 0, sizeof(s) );
我觉得没有必要作这个memset的动作呀?
是不是为了防止不小心没有给s赋值就使用了s的情况?
但我觉得当我定义了char s[30];
后,s这块存储区的内容应该就都是0了吧?
[213 byte] By [daidaoke-daidaoke] at [2007-12-16]
# 1
谁说的。char s[30],系统会划分一块连续的内存快给他,但内容不变。
如果是static char s[30],则系统自动初始化个元素为0.
max_welcome-????? at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 2
全局变量,会自动初始化
局部变量则不会
liubear at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 3
这和编译器及操作系统有关吧
bluefin-布店老板 at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 4
上次有人问这个问题,我回答了,还没有给我分呢。呵呵

char s[30];
printf("%s",s);
memset(s, 0, sizeof(s) );

你这样试试!?呵呵,绝对的乱码!
memset在数据的时候,也许你觉得没有用,但是如果你申明一个链表,每一个节点含有好几十个数据项。每个数据项都需要清0,这个时候你就会觉得有用了。
royalier-皇家 at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 5
你可以不用memset,
你节约了一行代码
可能在后面的程序中有内存越界的危险.
比如:字符串处理函数是以0x00作为字符串的结尾标志,她可能因为找不到这个标志,就会一直操作下去... 直到看见了一个0x00,但是已经越界了.
如果报出错误算你走运.
born20c-人工智能 at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 6
编程规范总是好的。如果你去阅读一些老外的源代码,你就会刊出他们考虑问题非常细致,很少有遗漏。
ice_soft-无言 at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 7
这主要是出于安全考虑,我想你编过的程序家在一起也不会超过几千行把,呵呵,程序做大了你就自然知道他的重要了
# 8
谢谢大家
daidaoke-daidaoke at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...