繁体   English   中英

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

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

你正在访问越界内存 真的不知道它里面有什么。 可能有任何东西,从你发现的4 ,到只有0雷霆猫恶魔可能从你的鼻子出来

根据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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM