#include<stdio.h>
int main()
{
int x=2;
char ch='c';
printf("%i\n",x);
printf("%s\n",ch);
printf("Hello");
return 0;
}
在此代码段中,我无意中将%s用于打印ch的值,而不是使用%c,但是我发现它不打印“ Hello”。到目前为止,我知道%s接受一个char指针,并且它确实寻找一个空字符来终止,但是您能解释一下这里发生了什么吗?我是初学者,很想知道这一点。
答案 0 :(得分:4)
在printf
中使用错误的转换说明符会导致行为未定义。
您将变量ch
声明为类型char
。
char ch='c';
但是转换说明符%s
期望类型为char *
的参数指向一个(空终止)字符串。因此,ch
'c'的值是interpreted
作为内存地址。
printf("%s\n",ch);
代替使用
printf("%c\n",ch);
否则,像这样声明变量ch
char *ch = "c";
然后
printf("%s\n",ch);