【发布时间】:2016-11-11 01:56:17
【问题描述】:
你能解释一下如何分配下面的内存来保存这么大的字符串,即使我给malloc 的大小只有一个字节
char **str;
int len = 1;
str = malloc(sizeof(char*)*len);//wont this allocate only one byte in heap?
str[0] = "This is a string";//this is more than one byte
printf("%s",str[0]);
我很困惑它是如何工作的。
【问题讨论】:
-
您没有分配 1 个字节。您正在分配一个指针 - 可能是 4 或 8 个字节。然后将它分配给其他地方已经存在的 const 字符串。
-
为什么你认为
malloc()会分配“只分配一个字节”? -
“为什么这个明显无效的程序会起作用?”一般来说,这种问题是没有成效的。阅读“未定义的行为”。 (此特定程序可能无效,也可能无效)。
-
str[0] = "This is a string";不制作物理副本。复制使用函数strcpy(...).
标签: c string dynamic-memory-allocation double-pointer arrayofstring