【发布时间】:2015-06-09 14:16:17
【问题描述】:
char* init_array()
{
const int size = 5;
char *p = (char*) malloc(size * sizeof(char));
strcpy(p, "Hello, world! How are you?");
return p;
}
如果 size = 5,malloc 应该从内存中获得 5 个空闲字符,但给定的字符串不适合 5 个字符,但它可以工作。
我的问题是为什么?首先我认为结果会被截断,但 p 是完整的字符串,而不仅仅是“Hello”或“Hell\0”
我在 Linux 上使用 GCC。它与编译器有关还是标准的东西?
【问题讨论】:
-
你怎么知道它有效?您观察到的是“未定义的行为”。你知道你的代码有问题,但这些错误并不总是导致失败或崩溃,事实上,任何事情都可能发生。
-
欢迎来到 Stack Overflow!标准警告:Do not cast the result of malloc
-
只需打印返回指针,使用 printf("%s", init_array());
-
@usrc 然后,阅读这里并正确阅读。请参阅添加的链接@Eregrith。
-
这称为未定义行为。想想undefined这个词的含义。