【发布时间】:2015-10-23 21:43:16
【问题描述】:
好吧,所以我真的不知道在这个问题标题中添加什么,但我遇到的问题可能是一个小问题
int i;
char ch[3];
for(i=0; i<10; i++){
ch[i] = (0x60|i)+1;
}
printf("%s %d\n", ch, i);
printf("address \n\ti %p\n\tch %p\n", &i, &ch);
输出结果是
abce 101
address
i 0xbfc6bd4c
ch 0xbfc6bd49
所以我遇到的问题是为什么 letted 'd' 会被跳过
考虑了一会儿为什么字符串也会被终止,假设 int i 变量位于 ch 变量之后,i 是 4 个字节长 i 的第一个字节被字母 'e' 替换,我猜其余的这 3 个字节用 0000 0000 填充,从而导致字符串终止,这是正确的吗??
编辑
所以我似乎得到了另一个问题,为什么循环不继续并写入变量 i 的内存空间
【问题讨论】:
-
您正在将 10 个项目写入大小为 3 的数组中。
-
@interjay 是的,我是故意的,我只是想了解事情是如何工作的,现在我想起来了,为什么 i 的其余字节也没有被替换
-
停止故意做坏事,然后询问发生了什么。是UB,就是这样。
-
我投票结束这个问题作为离题,因为寻求,(有意),UB解释说。
-
我坐在一棵树的树枝上,从树干一侧锯掉它。我以为我应该在撞到地上时摔断脖子,但我惊讶地发现我只锯掉了我的腿。解释一下。