字符串文字是常量吗?

字符串文字是常量吗?

如果我将一个字符串文字分配给a char*,即使使用了许多迂腐选项(-Wall -W -pedantic -std=c99),GCC和Clang都不会抱怨:

char *foo = "bar";

而他们(当然)不要抱怨,如果我分配const char*char*

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

和(一个不相关的问题)命令行参数(即:):argv它被认为是一个字符串文字数组?


肥皂起泡泡
浏览 696回答 3
3回答

慕莱坞森

他们是类型的char[N]地方N是字符,包括终端的数量\0。所以是的,您可以将它们分配给它们char*,但您仍然无法写入它们(效果将是未定义的)。Wrt argv:它指向一个指向字符串的指针数组。这些字符串是明确可修改的。您可以更改它们,并且需要保留最后存储的值。

莫回无

使用-Wwrite-strings选项,您将获得:warning: initialization discards qualifiers from pointer target type无论选项如何,GCC都会将文字放入只读内存部分,除非另有说明-fwritable-strings(但是此选项已从最近的GCC版本中删除)。命令行参数不是const,它们通常存在于堆栈中。
打开App,查看更多内容
随时随地看视频慕课网APP