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);
//                       ^