C 如果字符变量中存储的值是使用不正确的格式说明符打印的,printf()返回什么?
这是我的密码:C 如果字符变量中存储的值是使用不正确的格式说明符打印的,printf()返回什么?,c,C,这是我的密码: #include<stdio.h> void main() { char x = printf("hello"); printf("%c",x); } #包括 void main(){ char x=printf(“你好”); printf(“%c”,x); } 为什么它会打印“你好”,然后再打印一个字符 如果格式说明符是“%s”,程序将终止,为什么?成功返回后,printf返回打印的字符数。所以 printf("hello"); 打印hello
#include<stdio.h>
void main() {
char x = printf("hello");
printf("%c",x);
}
#包括
void main(){
char x=printf(“你好”);
printf(“%c”,x);
}
为什么它会打印“你好”,然后再打印一个字符
如果格式说明符是
“%s”
,程序将终止,为什么?成功返回后,printf
返回打印的字符数。所以
printf("hello");
打印hello
并返回5
,存储在x
中。所以
printf("%c", x);
打印字节5,在大多数字符集中,字节5是控制字符,而不是可打印字符(如字母)
也许你想要下面的
int x = printf("hello");
printf("%d\n", 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
printf
返回打印的字符数。当打印相对较少的字符数(127或更少)时,该值适合char
变量,即使该变量已签名
然后,代码将该值解释为代码为5的字符(长度为“hello”
)并打印其值。这是有效的。如果您使用%d
打印x
,您将看到在“hello”
之后打印的正确数字(即“hello5”
)
使用%s
打印字符
是不正确的,因为它需要以null结尾的C字符串。对%s
格式传递5
会导致未定义的行为,在您的情况下,这会导致程序崩溃。我投票将此问题作为主题外的问题结束,因为没有显示OPs工作。Google printf返回值立即回答了这个问题。有许多参考资料解释了printf
中的格式是如何工作的。尤其是%c
需要一个char
,%s
需要一个指针,即char*
。