我有一个看起来像这样的循环
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 次迭代。
此外,此程序中没有动态内存分配。
最佳答案
- 确保
buf
在分配范围内的某处有一个空(零值)字节。空字节是printf
告诉它已到达字符串末尾的方式;没有它,它将继续读取过去可以安全读取的位置。 - 确保
buf
不包含printf
可能用来指示其他参数的%d
之类的内容。更好的是 — 只需使用printf("%s", buf)
,它可以完全消除任何此类风险。
关于c - 仅在打印时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8902219/