有人可以向我解释这个简单程序的输出:
#include <stdio.h>
int main(int argc, char *argv[])
{
char charArray[1024] = "";
char charArrayAgain[1024] = "";
int number;
number = 2;
sprintf(charArray, "%d", number);
printf("charArray : %s\n", charArray);
snprintf(charArrayAgain, 1, "%d", number);
printf("charArrayAgain : %s\n", charArrayAgain);
return 0;
}
输出是:
./a.out
charArray : 2
charArrayAgain : // Why i don't have 2 here?
感谢。
答案 0 :(得分:28)
因为snprintf需要字符串的\ 0终止符的空格。因此,如果你告诉它缓冲区是1个字节长,那么'2'没有空间。
尝试使用snprintf(charArrayAgain, 2, "%d", number);
答案 1 :(得分:4)
snprintf(charArrayAgain, 1, "%d", number);
// ^
您将最大缓冲区大小指定为一个字节。但是,要在字符串中存储单个数字,您必须具有两个字节(一个用于数字,一个用于空终止符。)
答案 2 :(得分:4)
你已经告诉snprintf
只将一个字符打印到数组中,这不足以保存字符串转换的数字(即一个字符)和字符串终结符\ 0,这是第二个字符,因此snprintf无法将字符串存储到您提供的缓冲区中。
答案 3 :(得分:4)
snprintf
的第二个参数是要写入数组的最大字节数(charArrayAgain
)。它包括终止'\0'
,所以当大小为1时,它不会写一个空字符串。
答案 4 :(得分:2)
检查snprintf()的返回值,它可能是2。