C字符串内存分配隐含?

时间:2011-04-03 20:19:11

标签: c string multidimensional-array memory-management bytearray

sizeof(test)返回24.它是一个由3个char*指针组成的数组,每个指针在我的机器上各占8个字节。我的问题是C是否也为角色正确分配了空间?我想这样做是因为这有效,但我想确保我做得正确。

char* test[] = {"QW", "BT", "GH"};
int size = sizeof(test) / sizeof(char*);

4 个答案:

答案 0 :(得分:6)

是的,确实如此。但是,字符可能位于内存的只读部分。

答案 1 :(得分:3)

是的,编译器将为字符串文字分配空间(通常在只读静态数据部分中)。

答案 2 :(得分:2)

是。该值位于内存中,由数组中使用的* char指针指向的地址。所以是的,它存储在内存中。

答案 3 :(得分:0)

我在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的方式不同。