所以我正在用标准C做一个字符串基础教程。
我有:
char mystring[] = "HAL";
for (int i = 0; i < 3; i++)
mystring[i] += 1;
for (int k = 0; k < 10; k++)
printf("\n %d", mystring[k]);
Run Code Online (Sandbox Code Playgroud)
输出:
73
66
77
0
4
0
0
0
0
0
Run Code Online (Sandbox Code Playgroud)
现在mystring [3] = 0对我来说很有意义,因为我读到字符串文字以空字符结尾,因此字节数为n + 1个字符。我不知道为什么mystring [4] = 4。我在一个ascii表中查了4个,说它是“传输结束”。我在C字符串的传输字符末尾做了一些Google快速搜索,但没有找到任何东西。所以有人可以告诉我这是怎么回事吗?这是标准的东西吗?我什么时候可以期待它发生?
您正在访问超出范围的内存。您真的不知道里面有什么。有可能是从什么4你找到了,只是一个0,一个雷霆猫或魔鬼可能来自你的鼻子了。
根据C Standard的定义,访问内存超出范围是Undefined Behavior。