【发布时间】:2012-01-17 21:51:24
【问题描述】:
我有一个看起来像这样的循环
while(condition){
read_some_data(source, buf, BUFSIZE);
printf(buf);
memset(buf, 0, BUFSIZE+1);
//do stuff to affect condition that does not touch buf
}
buf 是一个大小为BUFSIZE+1 的字符数组。奇怪的是,如果我把printf 注释掉,程序就可以完美执行,没有分段错误。只有当我尝试打印出buf 时,我才会遇到问题。此外,段错误不一定发生在循环的第一次迭代中。通常需要 6 或 7 次迭代。
另外,这个程序没有动态内存分配。
【问题讨论】:
-
正确使用
printf()会发生什么?即printf("%s", buf); -
@DanFego 我很尴尬。那是我的问题。
-
只要你学到了东西就不用尴尬!也就是如何使用
printf()或许使用-Wall并注意编译器警告。 :) -
过去 20 年左右有什么变化吗?我以为
printf("abc");会和printf("%s","abc");有同样的效果,恐怕这只是暂时隐藏了堆的问题 -
@stacker:想想如果
buf包含任何%字符会发生什么
标签: c segmentation-fault printf