Dan*_*iel 1 c printf segmentation-fault
我有一个看起来像这样的循环
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
}
Run Code Online (Sandbox Code Playgroud)
buf
是一个大小的char数组BUFSIZE+1
.奇怪的是,如果我注释掉printf
,程序执行完美,没有分段错误.只有当我试图打印出来时才会出现buf
问题.此外,seg故障不一定发生在循环的第一次迭代中.它通常需要6或7次迭代.
此外,此程序中没有动态内存分配.
buf
在分配范围内的某处有一个空(零值)字节.那个空字节是如何printf
判断它到达字符串的结尾; 没有它,它会继续阅读它可以安全地去的地方.buf
不包含任何类似%d
的是printf
可能采取的指示额外的参数.更好 - 只需使用printf("%s", buf)
,完全消除任何此类风险.