首页 > 解决方案 > C中奇怪的输出字符(这不是错字)

问题描述

请解释发生了什么。我无法理解输出。

#include <stdio.h>
int main()
{
    char c="c";
    printf("%c",c);
    return 0;
}

c="false"当, "e",'false' 等时输出会是什么

我想了解发生了什么。我知道 char 要像这样使用:'a'。

PS 代码运行得非常好,在我的编程介绍本科课程考试中被问到。

标签: ccharoutputprintfstring-literals

解决方案


正在做

char c = "c"

错了,"c"是一个包含一个元素和一个空终止符的数组,第一个元素是 99,也称为'c'. 例如。

char ab[2] = "ab"

这里,"ab"等价于{'a', 'b', '\0'}末尾的'\0'解释如下。"c"相当于{'c', '\0'}和数组一般指向数组的第一个元素。因此,在您的代码中c实际上指向一个数组,其第一个元素是c. 所以指向该数组的指针也指向'c'。

char c = *"c"

确实有效,但很糟糕。您也可以printfprintf("%c\n", *c)if更改c为指针,deferencingc将为您提供数组的第一个元素,并且c是第一个和元素。

你应该做

char c = 'c'

字符串的空终止是因为:

"c"或任何其他字符串实际上{'c', '\0'}在末尾带有一个空终止符。需要这样我们才能知道字符串何时结束。例如。

"abcdefgh"中,我们不知道字符串何时结束,用户必须知道每个字符串的长度加上缓冲区的长度,因此它在结尾处由 a 终止,并且在到达'\0'时停止解析字符串'\0'. 所以,"abcdefgh"其实是{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '\0'}


推荐阅读