空间如何分配char *数组?

时间:2015-04-08 18:30:55

标签: c++ c string

例如,在

#define NUM_THREADS 8
char *messages[NUM_THREADS];
messages[0] = "English: Hello World!";
messages[1] = "French: Bonjour, le monde!";
messages[2] = "Spanish: Hola al mundo";
messages[3] = "Klingon: Nuq neH!";
messages[4] = "German: Guten Tag, Welt!"; 
messages[5] = "Russian: Zdravstvytye, mir!";
messages[6] = "Japan: Sekai e konnichiwa!";
messages[7] = "Latin: Orbis, te saluto!";

在编译期间,编译器是否计算所有这些字符串的最大长度,然后保留空格= NUM​​_THREADS *(max_len + 1)。在字符串末尾为空字节添加1。或者是为每个字符串分配不同的空间量,具体取决于它们的长度四舍五入到最近的单词?

然而,这始终是不可能的,因为初始化不一定需要在编译时发生。我假设指向存储字符串的数据部分的指针是用消息[i]保存的。

1 个答案:

答案 0 :(得分:4)

这些字符串使用的内存与字符串长度加1(终止空字符)完全一样长。你定义的数组有4*NUM_THREADS个字节(假设你的各种32位C编译器),因为它只保存指针,而不是整个字符串的副本。

没有四舍五入,没有猜测,没有数据模糊。这是C。