【发布时间】:2013-04-18 00:13:21
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *ptr = malloc(sizeof(char) * 1);
ptr = "Hello World";
puts(ptr);
getchar();
}
我不是 malloc() 专家,但由于我只分配了一个字节但为 *ptr 指针分配了一个包含 11 个字节的值,所以该代码不应该给出错误吗?
还是 H 是否存储在我分配的位置,然后字符串的其余部分就放在它之后的位置?
【问题讨论】:
-
这不是您的代码,否则您会收到错误消息,因为
(char *) ptr不是左值。 -
如果你真的写了
ptr = "Hello World";,那就是指针赋值;它不会复制任何数组的内容。但是请更新您的问题以显示您实际编译的代码(复制并粘贴它,不要重新输入)。 -
旁注;
sizeof(char)被定义为 1... 数学告诉我们任何乘以 1 的结果都是相同的值。那里有两个级别的冗余。只需使用malloc(1)。
标签: c string pointers memory malloc