我是一名新手程序员,但通常我可以解开自己的问题.这次我解决了这个问题,但它仍然让我感到困惑.一位朋友建议我问这个社区的意见.
我正在尝试用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]解决了这个问题.