Segfault仅在打印时

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次迭代.

此外,此程序中没有动态内存分配.

rua*_*akh 7

  • 确保buf在分配范围内的某处有一个空(零值)字节.那个空字节是如何printf判断它到达字符串的结尾; 没有它,它会继续阅读它可以安全地去的地方.
  • 确保buf不包含任何类似%d的是printf可能采取的指示额外的参数.更好 - 只需使用printf("%s", buf),完全消除任何此类风险.


TJD*_*TJD 6

您缺少printf的format specifier参数