c - C中奇怪的输出字符(这不是错字)
问题描述
请解释发生了什么。我无法理解输出。
#include <stdio.h>
int main()
{
char c="c";
printf("%c",c);
return 0;
}
c="false"
当, "e"
,'false' 等时输出会是什么
我想了解发生了什么。我知道 char 要像这样使用:'a'。
PS 代码运行得非常好,在我的编程介绍本科课程考试中被问到。
解决方案
正在做
char c = "c"
错了,"c"
是一个包含一个元素和一个空终止符的数组,第一个元素是 99,也称为'c'
. 例如。
char ab[2] = "ab"
这里,"ab"
等价于{'a', 'b', '\0'}
末尾的'\0'解释如下。"c"
相当于{'c', '\0'}
和数组一般指向数组的第一个元素。因此,在您的代码中c
实际上指向一个数组,其第一个元素是c
. 所以指向该数组的指针也指向'c'。
char c = *"c"
确实有效,但很糟糕。您也可以printf
将printf("%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'}
。
推荐阅读
- windows - Reading the system's locale settings in Electron
- javascript - 如何使用电子在屏幕上显示鼠标点击动画?
- javascript - 从 SwiftUI 按钮调用 evaluateJavascript
- spacemacs - Spacemacs - 如何关闭箭头键
- javascript - 通过 touchstart 导致布局更改时防止与其他元素交互
- unity3d - 旋转父对象而不旋转实例化的子对象
- python - 如何在 Python 中将 cplex 或 gurobi 求解器与 cvxopt 一起使用?
- python - 熊猫:如何用另一列中的字符串填充nan一列
- download - 从 Flash 切换到 HTML5 后,有没有办法导出 Adobe Connect 记录?
- html - 如何从 dart 中的属性名称获取属性值(dart 中的 html 属性中的 _EVENTVALIDATION)?