你能解释一下下面的内存是如何分配来容纳这么大的字符串的吗,即使我给 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]);
我很困惑它是如何工作的。
最佳答案
您没有分配一个字节。
表达式sizeof(char*)*len
可以简化为sizeof(char *)
,即字符指针的大小。这通常是 4 或 8。
然后你只需在那里存储一个指针,字符串文字 "This is a string"
的值就是该文字在内存中出现的地址,所以这样:
str[0] = "This is a string";
只是对 str[0]
(它是一个指针)进行单个指针大小的赋值,不复制任何字符。一个指针就是您分配了多少空间,所以一切都很好。
关于c - 双指针的动态内存分配将大小作为一个,但可以容纳一个超过一个字节的字符串。这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38267641/