C snprintf和sprintf解释
有人能给我解释一下这个简单程序的输出吗C snprintf和sprintf解释,c,string-formatting,printf,C,String Formatting,Printf,有人能给我解释一下这个简单程序的输出吗 #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"
#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;
}
谢谢。检查snprintf()的返回值,它可能是2。因为snprintf需要为字符串的\0终止符留出空间。因此,如果你告诉它缓冲区是1字节长,那么就没有空间容纳“2” 尝试使用
snprintf(charArrayAgain,2,“%d”,数字)代码>
您正在将最大缓冲区大小指定为一个字节。但是,要在字符串中存储单个数字,必须有两个字节(一个用于数字,一个用于空终止符)。您已经告诉snprintf
只在数组中打印一个字符,这不足以保存字符串转换后的数字(即一个字符)和字符串终止符\0,后者是第二个字符,因此,snprintf无法将字符串存储到您给定的缓冲区中。snprintf
的第二个参数是要写入数组的最大字节数(charArrayAgain
)。它包括终止的'\0'
,因此大小为1时,它不会写入空字符串。与其使用2
,不如使用sizeof(charArrayAgain)
。同意,sizeof(charArrayAgain)会更好-尽管通常使用指针而不是数组,在这种情况下,sizeof()将不起作用。
./a.out
charArray : 2
charArrayAgain : // Why i don't have 2 here?
snprintf(charArrayAgain, 1, "%d", number);
// ^