c - char s[] 和 char *s 有什么区别?

标签 c string char constants

在 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/

相关文章:

C:使用以指针为参数的 void 函数更改 char 数组的值

c++ - 列出线程 C++

c - 使用嵌套循环在 C 中打印 star ('*' ) diamond?

c - 为什么 C == 对于相等的字符串返回 true?

c - 我该如何在 C 中解决这个问题?

c++ - C++ 中不区分大小写的标准字符串比较

c# - 如何从 .NET 字符串中获取一组 Unicode 代码点?

python - 如何使用正则表达式和精确文字匹配的混合来获取索引值

database - 如何从搜索查询中搜索子项?

c - char* 操作期间的内存泄漏