【问题标题】:C string memory allocation implicit?C字符串内存分配隐式?
【发布时间】:2011-04-03 20:19:11
【问题描述】:
sizeof(test) 返回 24。它是一个由 3 个char* 指针组成的数组,在我的机器上每个指针有 8 个字节。我的问题是 C 是否也为字符正确分配空间?我猜是这样,因为这行得通,但我想确保我做得正确。
char* test[] = {"QW", "BT", "GH"};
int size = sizeof(test) / sizeof(char*);
【问题讨论】:
标签:
c
string
multidimensional-array
memory-management
bytearray
【解决方案1】:
是的,确实如此。不过,这些字符可能位于内存的只读部分。
【解决方案2】:
是的,编译器将为字符串文字分配空间(通常在只读静态数据部分)。
【解决方案3】:
是的。该值位于内存中数组中使用的 *char 指针所指向的地址处。所以是的,它存储在内存中。
【解决方案4】:
我在 the Standard 中对 6.4.5/5 的改写
...字符串文字被实现为具有“char”类型的静态存储持续时间的数组...
因此,对象被分配为任何其他static 变量
static int arr[100] = {0};
if (strcmp(foo, "bar")) exit(0);
int *ptr = malloc(100 * sizeof *ptr);
数组arr和字符串字面量"bar"的分配方式相同;与分配ptr 的方式不同。