c - 字符串文字是常量吗?

标签 c string constants literals

如果我将字符串文字分配给 char*,GCC 和 Clang 都不会提示,即使使用了很多迂腐的选项(-Wall -W -pedantic -std=c99):

char *foo = "bar";

如果我将 const char* 分配给 char*,他们(当然)会提示。

这是否意味着字符串文字被认为是 char* 类型?它们不应该是 const char* 吗?如果它们被修改,这不是定义的行为!

并且(一个不相关的问题)命令行参数(即:argv)如何:它是否被视为字符串文字数组?

最佳答案

它们是 char[N] 类型,其中 N 是包括终止符 \0 的字符数。所以是的,你可以将它们分配给 char*,但你仍然不能写入它们(效果将是未定义的)。

Wrt argv:它指向一个字符串指针数组。这些字符串是可显式修改的。您可以更改它们,并且它们需要保留最后存储的值。

关于c - 字符串文字是常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4493139/

相关文章:

c - 包含名为 "generic"的变量的结构无法在 C++/CLI 项目中编译

c - 队列(fifo)的实现

string - bash 字符串比较

string - Bash 索引第 n 个字符后的子字符串

c - 段错误和堆栈溢出有什么区别?

c++ - C - 变量未初始化就被使用

java - 不区分大小写的字符串 split() 方法

函数声明中的 C++ const 变量

c++ - 为什么我要for(auto&it:myUnorderedMap){…= std::move(it.second)}时会得到const引用?

c# - 常量最佳实践