我正在尝试将char
变量与if
语句中的字符串进行比较。
这是我的代码:
int main(void) {
char x[2] = "i";
if(x[2] == 'i'){
printf ("x is i\n");
}
return 0;
}
if
语句最终是假的,程序什么都不做。我做错了什么?
答案 0 :(得分:2)
C中的数组的起始索引为0,结束索引的大小为1.对于x
,这意味着有效索引为x[0]
和x[1]
通过索引x[2]
,您正在读取数组的末尾。这会调用undefined behavior,在这种情况下会显示为获得意外结果。可能发生的事情是,你正在阅读x
之后发生的任何值,它被分配到堆栈上。
由于x
包含字符串"i"
,其中包含字符'i'
后跟空字节(0),因此您需要x[0]
。
答案 1 :(得分:1)
x[2]
正在访问数组之外的内存,这会导致未定义的行为。数组索引从C中的0
开始,因此包含两个元素的数组的有效索引为x[0]
和x[1]
。
在您的情况下,字母i
存储在x[0]
,因此您应该写:
int main(void) {
char x[2] = "i";
if(x[0] == 'i'){
printf ("x is i\n");
}
return 0;
}
答案 2 :(得分:1)
char x[2] = "i";
x
的内存中视图将是这样的:
+---+---+
| i | \0|
+---+---+
x[0] x[1]
在您的计划中,您正在访问x[2]
。访问数组下标超出范围是未定义的行为。
相反,你应该:
if(x[0] == 'i'){