【发布时间】:2013-03-12 18:58:48
【问题描述】:
为什么会打印出“test”?:
char *str;
str = (char *)malloc(1);
str[0] = 't';
str[1] = 'e';
str[2] = 's';
str[3] = 't';
我正在尝试动态扩展字符串并尝试了解 malloc/realloc 的工作原理,上述行为让我感到困惑,因为 malloc()/realloc() 建议扩展 char* 。
提前致谢。
【问题讨论】:
-
因为它是 C 而不是 java... 边界检查允许基于大块进行非常低级别的分页。如果它看起来可以工作,你可能确定你损坏了程序的其他部分,它会在其他地方意外失败...... C 要求程序员注意不要这样做......
-
在更广泛的问题背景下的次要问题(已经得到回答),但也不要在标准 C 中强制转换 malloc。与 C++ 不同,在 C 中执行此操作被认为是不好的做法,它真正能做的就是隐藏错误(不包括 stdlib.h)并产生代码维护问题,例如:您更改 malloc 调用中使用的变量的类型6 个月后,必须修复石膏。