如果存储在字符变量中的值使用不正确的格式说明符打印,则 printf() 返回什么



这是我的代码:

#include<stdio.h>
void main() {
    char x = printf("hello");
    printf("%c",x);
}

为什么它打印"你好",然后打印一个字符?

如果格式说明符"%s",程序终止,为什么?

printf返回打印的字符数。当您打印相对较少的字符数(127 或更少)时,即使该值是有符号的,该值也适合char变量。

然后,代码将该值解释为代码为 5(长度为 "hello")的字符,并打印其值。这是有效的。如果使用 %d 打印x,您将看到在 "hello" 之后打印的正确数字(即 "hello5"演示)。

打印带有 %schar是不正确的,因为它需要以 null 结尾的 C 字符串。传递%s格式的5会导致未定义的行为,在您的情况下,最终会导致程序崩溃。

成功

返回后,printf返回打印的字符数。所以

printf("hello");

打印hello并返回5,并将其存储在x 中。所以

printf("%c", x);
打印字节 5,在大多数字符集中,字节

5 是控制字符,而不是可打印字符(如字母)。

也许你想要以下内容?

int x = printf("hello");
printf("%dn", x);

输出:

hello5

printf("%s", x);失败,因为%s需要一个指向由 NUL 字符终止的char序列的指针。

char *s = "hello";
char ch = 'h';
printf("%s", s);   // ok
printf("%c", ch);  // ok
printf("%s", c);   // XXX
printf("%c", s);   // XXX

最新更新