c++ - 空间如何分配 char* 数组?

标签 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。还是根据四舍五入到最接近的单词的长度为每个字符串分配不同数量的空间?

然而,这并不总是可行的,因为初始化不一定在编译时发生。我假设指向将存储字符串的数据部分的指针包含在 messages[i] 中。

最佳答案

这些字符串使用的内存恰好与字符串长度加一(终止空字符)一样长。您定义的数组有 4*NUM_THREADS 个字节(假设您使用普通的 32 位 C 编译器),因为它只包含指针,而不是整个字符串的拷贝。

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

关于c++ - 空间如何分配 char* 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29522621/

相关文章:

c++ - literal double 到 float 的转换是否等于 float literal?

c++ - 删除运算符

C 代码,似乎跳过了 if 语句

c - 如果输出到终端,则在 C 中检测

c# - 如何在不使用循环的情况下修剪字符串数组中的每个字符串元素?

python - Concat string if 条件,否则什么都不做

c - 为什么在为 char 指针赋值时会出现运行时错误?

c++ - 在 C++ 中,严格的自底向上分析如何暗示返回类型不用于重载决策?

C++ 基本构造函数/vector 问题(1 个构造函数,2 个析构函数)

c - 函数计算结果错误答案