在 C 中,可以在声明中使用字符串文字,如下所示:
char s[] = "hello";
或者像这样:
char *s = "hello";
那么有什么区别呢?我想知道在编译时和运行时的存储持续时间实际发生了什么。
最佳答案
这里的区别在于
char *s = "Hello world";
将把“Hello world”
放在内存的只读部分中,并使s
成为一个指针,使任何写入对此内存的操作非法。
在做的时候:
char s[] = "Hello world";
将文字字符串放入只读内存中,并将该字符串复制到堆栈上新分配的内存中。从而使得
s[0] = 'J';
合法。
关于c - char s[] 和 char *s 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44390536/