【问题标题】:c, how do i use a char variable in an if statement?c, 如何在 if 语句中使用 char 变量?
【发布时间】:2018-02-01 19:16:28
【问题描述】:

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

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

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

【问题讨论】:

标签: c


【解决方案1】:

C 中的数组的起始索引为 0,结束索引的大小为负 1。对于 x,这意味着有效索引为 x[0]x[1]

通过索引x[2],您正在读取数组末尾的内容。这会调用undefined behavior,在这种情况下表现为获得意外结果。幕后可能发生的事情是,您正在读取恰好位于堆栈上分配的x 之后的任何值。

由于x 包含字符串"i",它由字符'i' 后跟一个空字节(0) 组成,因此您需要x[0]

【讨论】:

    【解决方案2】:

    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;
    }
    

    【讨论】:

      【解决方案3】:
      char x[2] = "i";
      

      x 的内存视图如下所示:

          +---+---+          
          | i | \0|           
          +---+---+
          x[0] x[1]
      

      在您的程序中,您正在访问x[2]。访问超出范围的数组下标是未定义的行为。

      相反,您应该:

      if(x[0] == 'i'){
      

      【讨论】:

        猜你喜欢
        • 2014-10-15
        • 2013-07-12
        • 1970-01-01
        • 2015-07-24
        • 2018-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        相关资源
        最近更新 更多