【发布时间】:2014-05-22 01:10:46
【问题描述】:
当我这样声明一个字符串时:
char string[] = "Hello";
实际上等价于-
char string[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
因此,堆栈上的内存是通过声明为字符串分配的。但是当我声明这样的字符串时会发生什么:
char *string = "Hello";
变量“string”包含字符串的第一个字母“H”在内存中的位置。我想问一下:
字符串在内存中的位置?堆栈\堆\等。
是否自动为字符串分配了足够的内存,或者我必须分配 自己记忆(例如,
malloc)到字符串?如果必须,我该怎么做(我想要一个代码的小例子)?
我想指出,我的问题的答案很有可能取决于系统。如果是,请注意这个事实,并尝试根据流行平台(Windows、Linux 等)上发生的情况来回答。
【问题讨论】:
-
@tesseract 我认为是。谢谢:)
-
这里重要的一点是,当您执行
char string[] = "hello"时,您可以执行string[0] = 'm'以使其成为mello,但如果您执行char *string = "hello",您就不能执行string[0] ='m',如果字符串由编译器放置在只读内存中。
标签: c arrays string pointers memory-management