Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果字符变量中存储的值是使用不正确的格式说明符打印的,printf()返回什么?_C - Fatal编程技术网

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*