#include<stdio.h>
int main(void) {
char a = "any"; //any string
printf("%c", a);
getch();
}
为什么总是d
(对于%c
)或100
(对于%d
)会被打印出来?发生了什么事?
答案 0 :(得分:4)
char a="any";
未声明任何字符串。您的编译器应该通过错误/警告。你需要
const char *a = "any";
现在
printf("%c", *a);
将打印字符a
,因为指针a
是指向字符串文字any
的第一个元素的指针。
答案 1 :(得分:3)
您的代码存在问题。上
char a="any";
字符串文字“any”是一个指针,但是你将它保存在(小)整数类型中。因为a的值是地址(的一部分),所以它将具有基本上任意的值。在我的机器上它打印“T”(如果我删除了getch()行,因为它不能编译)。
GCC发出以下警告:
warning: initialization makes integer from pointer without a cast
和你使用的任何编译器可能会告诉你类似的东西。你应该认真对待这个警告。
答案 2 :(得分:0)
"something between double quotes"
为字符串分配内存并返回指向内存中字符串的指针。你需要使用a
将此指针存储在char *a = "abc";
中,现在'a'是指向字符串abc的指针。
printf("%s",a) this will print the entire string abc.
对于单个字符,在这种情况下使用单引号'a'
char a = 'b';
是正确的。
printf("%c",a) this will print b.
printf("%d",a) this will print the ascii value of 'b', which is 98
答案 3 :(得分:0)
声明
char a = "any";
字符串文字"any"
计算其第一个字符const char *
的地址。将const char *
分配给char
变量会隐式地将指针转换为整数。如果使用-W
gcc标志进行编译,则会发出以下警告:
warning: initialization makes integer from pointer without a cast [enabled by default]
接下来发生的是,将整数值的最低有效字节分配给char
变量a
。这是随机值,无法预测。在我的机器上,它恰好是角色/
的ascii代码。在您的机器上,它恰好是100,即字符d
的ascii代码。这只是纯粹的机会。没别了。
您应该将字符串文字分配给const char *
:
const char *a = "any";
并将a
转化说明符%s
指向的字符串打印为:
printf("%s\n", a);
另请注意,getch
不是C标准库函数,因此您的程序无法在Linux机器上编译。但是,您可以使用getchar
获得相同的效果。