Counter int在没有询问的情况下递增

Fel*_*len 0 c++ arrays g++

考虑以下代码:

#include <string.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
  const char *task = "foo";

  int key = 0;
  int arr[] = {};

  if (!strcmp(task, "foo")) {
    key++;
  }

  arr[key] = 2;

  key++;

  printf("key: %d\n", key);
}
Run Code Online (Sandbox Code Playgroud)

最终的价值key3.它应该是2.

如果我改变"foo""foo1"在第一次出现的终值key1,符合市场预期.

如果我改变arr[key] = 2arr[key] = 1,或删除线,终值key就是2,符合市场预期.

为什么是这样?

Nat*_*ica 6

您的代码中存在未定义的行为,因此任何事情都可能发生.

int arr[] = {};
Run Code Online (Sandbox Code Playgroud)

是零大小的数组,不是标准的.由于其大小为0,访问任何元素并设置其值是未定义的行为.由于我们现在有未定义的行为,因此不再有任何方法可以推断出程序的工作原理.