当我声明一个这样的字符串时:
char string[] = "Hello";
实际上与 -
等效char string[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
因此,通过声明为字符串分配了堆栈上的内存。但是当我声明一个这样的字符串时会发生什么:
char *string = "Hello";
变量'string'包含字符串的第一个字母'H'位于内存中的地址。我想问一下:
字符串位于内存中?栈\堆\等。
是否为字符串自动分配了足够的内存,或者我必须分配
记忆(例如,由malloc
)到我自己的字符串?如果必须的话,我该怎么做(我想提供一些代码示例)?
我想指出,我的问题的答案很可能是系统依赖的。如果是,请注意这个事实,并尝试根据流行平台(Windows,Linux等)上发生的情况来回答。
答案 0 :(得分:1)
未定义char *string = "Hello";
中的字符串存储位置。在实践中,它通常位于称为文本段的只读存储器中,其中存储程序的代码。指针存储在“堆栈”或数据段中,具体取决于定义是在函数内部还是在任何函数之外。
您无需为字符串分配内存。
答案不依赖于系统(除非系统可以将字符串存储在任何方便的位置,不同的系统可能会将其存储在不同的位置)。