这是传输结束的角色还是其他什么?

时间:2015-09-16 22:48:52

标签: c arrays ascii

所以我在标准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字符串的传输结束字符上做了一些快速谷歌搜索,但没有找到任何东西。那么有人会告诉我这里发生了什么吗?这是标准的事吗?我什么时候能指望它发生?

4 个答案:

答案 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