【发布时间】:2009-07-16 11:54:04
【问题描述】:
while(*a++ = *b++){} 其中 a 和 b 是有效的字符指针。
【问题讨论】:
while(*a++ = *b++){} 其中 a 和 b 是有效的字符指针。
【问题讨论】:
如果 b 是一个 10 个字符的以空字符结尾的字符串,而 a 是一个分配了 4 个字符的缓冲区,则您将使用上述代码在分配的内存之外进行写入。
【讨论】:
另一种答案:
char *a = "Hello";
char *b = "World";
这些都是有效的字符指针。但是 a 并不指向可写内存。
【讨论】:
指向的字符串可能不是以空值结尾的,这意味着正在从它不应该访问的内存中读取数据并将其分配给它,因此违反了。
【讨论】:
看起来为数组“a”分配的内存小于数组“b”的长度。
【讨论】:
如果您在 MSDev 上运行它,请将其放入调试器中并单步执行,和/或查看存储 a 和 b 的实际内存区域并直接查看发生了什么。它可以是任何已经提到的可能性。
【讨论】: