Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 只有在打印时才出现故障_C_Segmentation Fault_Printf - Fatal编程技术网

C 只有在打印时才出现故障

C 只有在打印时才出现故障,c,segmentation-fault,printf,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时,我才会遇到问

我有一个像这样的循环

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
时,我才会遇到问题。此外,seg故障不一定发生在循环的第一次迭代中。通常需要6到7次迭代


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

您缺少printf的格式说明符参数

您缺少printf的格式说明符参数

  • 确保
    buf
    在分配的范围内有一个空(零值)字节。这个空字节是
    printf
    判断它到达字符串末尾的方式;如果没有它,它将在安全的地方继续阅读过去
  • 确保
    buf
    不包含任何类似
    %d
    的内容,而
    printf
    可能用于指示其他参数。更好的是-只需使用
    printf(“%s”,buf)
    ,即可完全消除此类风险
      • 确保
        buf
        在分配的范围内有一个空(零值)字节。这个空字节是
        printf
        判断它到达字符串末尾的方式;如果没有它,它将在安全的地方继续阅读过去
      • 确保
        buf
        不包含任何类似
        %d
        的内容,而
        printf
        可能用于指示其他参数。更好的是-只需使用
        printf(“%s”,buf)
        ,即可完全消除此类风险

      确保
      buf
      \0
      终止的字符串。
      只有
      printf()
      才能打印字符串。

      确保
      buf
      \0
      终止的字符串。
      只有
      printf()
      才能打印字符串。

      您需要将字符串指定为打印参数:
      printf(“%s”,buf)

      希望这有帮助!

      注意:您需要将字符串指定为打印参数:
      printf(“%S”,buf)

      希望这有帮助!

      N.S.

      是否以null结尾?如果您只想将buf写入stdout,为什么要调用printf(buf)而不是put(buf)?

      是否以null结尾?如果您只想将buf写入stdout,为什么要调用printf(buf)而不是put(buf)?

      如果正确使用
      printf()
      会发生什么?i、 e.
      printf(“%s”,buf)@DanFego我很尴尬。那是我的问题。只要你学到了一些东西,就不必感到尴尬!也就是说,如何使用
      printf()
      ,或者如何使用
      -Wall
      ,以及如何注意编译器警告:过去20年左右有什么变化吗?我认为,
      printf(“abc”)将具有与printf(“%s”、“abc”)相同的效果恐怕这只是暂时隐藏了heap@stacker:思考如果
      buf
      包含任何
      %
      字符会发生什么如果正确使用
      printf()
      会发生什么?i、 e.
      printf(“%s”,buf)@DanFego我很尴尬。那是我的问题。只要你学到了一些东西,就不必感到尴尬!也就是说,如何使用
      printf()
      ,或者如何使用
      -Wall
      ,以及如何注意编译器警告:过去20年左右有什么变化吗?我认为,
      printf(“abc”)将具有与printf(“%s”、“abc”)相同的效果恐怕这只是暂时隐藏了heap@stacker:思考如果
      buf
      包含任何
      %
      字符会发生什么情况