这是我的代码:
#include<stdio.h>
void main() {
char x = printf("hello");
printf("%c",x);
}
为什么它打印"你好",然后打印一个字符?
如果格式说明符"%s"
,程序终止,为什么?
printf
返回打印的字符数。当您打印相对较少的字符数(127 或更少)时,即使该值是有符号的,该值也适合char
变量。
然后,代码将该值解释为代码为 5(长度为 "hello"
)的字符,并打印其值。这是有效的。如果使用 %d
打印x
,您将看到在 "hello"
之后打印的正确数字(即 "hello5"
演示)。
打印带有 %s
的char
是不正确的,因为它需要以 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