考虑以下代码:
#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)
最终的价值key是3.它应该是2.
如果我改变"foo"到"foo1"在第一次出现的终值key是1,符合市场预期.
如果我改变arr[key] = 2至arr[key] = 1,或删除线,终值key就是2,符合市场预期.
为什么是这样?
您的代码中存在未定义的行为,因此任何事情都可能发生.
int arr[] = {};
Run Code Online (Sandbox Code Playgroud)
是零大小的数组,不是标准的.由于其大小为0,访问任何元素并设置其值是未定义的行为.由于我们现在有未定义的行为,因此不再有任何方法可以推断出程序的工作原理.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |