[英]Is this End of Transmission character or something else?
所以我正在用标准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,它说它是“传输结束”。 我在C字符串的传输字符末尾做了一些快速谷歌搜索,但没有找到任何东西。 那么有人会告诉我这里发生了什么事吗? 这是标准的事吗? 我什么时候能指望它发生?
访问数组边界之外是未定义的行为 。
一旦超过第一个\\ 0,C就不会定义缓冲区的内容。 基本上,你从上次使用内存区域获得了内存中留下的任何内容,并且它在你的上下文中没有任何意义。
该行分配4个字节的内存。 下面数组中的3加上看不见的字符串终结符'\\0'
char mystring[] = "HAL";
数组索引从0
,因此mystring[2]
为'L'
, mystring[3]
为'\\0'
。
进一步索引是未定义的行为,因此没有人可以解释你得到的值4
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.