c - 仅在打印时出现段错误

标签 c segmentation-fault printf

我有一个看起来像这样的循环

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/

相关文章:

c++ - 将 std::string 转换为 char * 时,SIGSEGV 仅在我的应用程序的某些部分崩溃

c - sem_post 的段错误

c - 使用 strt_ok 后释放变量时出现段错误

c++ - At 符号 (@) 和美元符号 ($) 在 C 或 C++ 中是否有任何特殊含义

c - Linux pthread 生产者和消费者

c++ - 处理迭代器时由信号 SIGSEGV(地址边界错误)终止

c - 在C中扫描并打印变量数据类型 "double"

c - 使用 printf 时 Mergesort 输出发生变化

c++ - “_snprintf”未在此范围内声明

c - 我收到 Eclipse 错误 : conversion to 'uint16_t' from 'int' may alter its value