c,我如何在if语句中使用char变量?

时间:2018-02-01 19:16:29

标签: c

我正在尝试将char变量与if语句中的字符串进行比较。 这是我的代码:

int main(void) {
  char x[2] = "i";
  if(x[2] == 'i'){
    printf ("x is i\n");
  }
  return 0;
}

if语句最终是假的,程序什么都不做。我做错了什么?

3 个答案:

答案 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'){