通过字符串声明分配内存

时间:2014-04-09 03:34:57

标签: c arrays string pointers memory-management

当我声明一个这样的字符串时:

char string[] = "Hello";

实际上与 -

等效
char string[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

因此,通过声明为字符串分配了堆栈上的内存。但是当我声明一个这样的字符串时会发生什么:

char *string = "Hello";

变量'string'包含字符串的第一个字母'H'位于内存中的地址。我想问一下:

  1. 字符串位于内存中?栈\堆\等。

  2. 是否为字符串自动分配了足够的内存,或者我必须分配 记忆(例如,由malloc)到我自己的字符串?如果必须的话,我该怎么做(我想提供一些代码示例)?

  3. 我想指出,我的问题的答案很可能是系统依赖的。如果是,请注意这个事实,并尝试根据流行平台(Windows,Linux等)上发生的情况来回答。

1 个答案:

答案 0 :(得分:1)

未定义char *string = "Hello";中的字符串存储位置。在实践中,它通常位于称为文本段的只读存储器中,其中存储程序的代码。指针存储在“堆栈”或数据段中,具体取决于定义是在函数内部还是在任何函数之外。

您无需为字符串分配内存。

答案不依赖于系统(除非系统可以将字符串存储在任何方便的位置,不同的系统可能会将其存储在不同的位置)。