如果我将字符串文字分配给 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/