为什么对字符变量使用%s而不在c中执行下面的语句?

时间:2020-01-24 14:55:32

标签: c printf

#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指针,并且它确实寻找一个空字符来终止,但是您能解释一下这里发生了什么吗?我是初学者,很想知道这一点。

1 个答案:

答案 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);