小编use*_*002的帖子

sprintf缓冲区大小

我是一名新手程序员,但通常我可以解开自己的问题.这次我解决了这个问题,但它仍然让我感到困惑.一位朋友建议我问这个社区的意见.

我正在尝试用C打印数字.我有一个使用sprintf执行此操作的功能.数字永远不应超过2位数,所以我使用2个字符的缓冲区.不知何故,这是我的逻辑失败的地方,因为这会通过修改传递给sprintf的一个变量而导致无限循环,但增加缓冲区大小可以解决问题.

这是失败的代码:

#include <stdio.h>

void printarray(int array[][4]) {
  int y;
  int z;
  char buf[2];
  for (y=0; y<4; y++) {
    for (z=0; z<4; z++) {
      sprintf(buf, "%d", array[y][z]);
      printf("buf is %s, y is %d and z is %d\n",buf,y,z);
    }   
  }
}

int main() {
  int arr[4][4] = {  {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}  };  

  printarray(arr);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

一旦y到达2,它就会重置为0,从而无限循环.将buf [2]改为buf [8]解决了这个问题.

c printf buffer

3
推荐指数
1
解决办法
1557
查看次数

标签 统计

buffer ×1

c ×1

printf ×1