所以我在标准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]);
输出:
73
66
77
0
4
0
0
0
0
0
现在mystring [3] = 0对我有意义,因为我读到字符串文字以空字符结尾,所以字节数是n + 1个字符。我不知道为什么mystring [4] = 4。我在ascii表中看了4,它说它已经传输了#34;我在C字符串的传输结束字符上做了一些快速谷歌搜索,但没有找到任何东西。那么有人会告诉我这里发生了什么吗?这是标准的事吗?我什么时候能指望它发生?
答案 0 :(得分:4)
您正在访问越界内存。你真的不知道里面有什么。可能会有4
找到的任何内容,只有0
, Thunder Cat 或a demon may come out of your nose。
根据C Standard定义,访问越界内存是Undefined Behavior。
答案 1 :(得分:3)
访问数组边界超出未定义的行为。
答案 2 :(得分:2)
一旦超过第一个\ 0,C就不会定义缓冲区的内容。基本上,你从上次使用内存区域得到了内存中留下的任何内容,并且它在你的上下文中没有任何意义。
答案 3 :(得分:0)
此行分配4个字节的内存。下面数组中的3加上看不见的字符串终止符'\0'
char mystring[] = "HAL";
数组索引来自0
,因此mystring[2]
为'L'
而mystring[3]
为'\0'
。
进一步索引是未定义的行为,因此没有人可以解释您获得的值4
。