字符串文字是常量吗?如果我将一个字符串文字分配给a char*,即使使用了许多迂腐选项(-Wall -W -pedantic -std=c99),GCC和Clang都不会抱怨:char *foo = "bar";而他们(当然)不要抱怨,如果我分配const char*到char*。这是否意味着字符串文字被认为是char*类型?他们不应该const char*吗?如果它们被修改,它就不是定义的行为!和(一个不相关的问题)命令行参数(即:):argv它被认为是一个字符串文字数组?
3 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
他们是类型的char[N]
地方N
是字符,包括终端的数量\0
。所以是的,您可以将它们分配给它们char*
,但您仍然无法写入它们(效果将是未定义的)。
Wrt argv
:它指向一个指向字符串的指针数组。这些字符串是明确可修改的。您可以更改它们,并且需要保留最后存储的值。
莫回无
TA贡献1865条经验 获得超7个赞
使用-Wwrite-strings
选项,您将获得:
warning: initialization discards qualifiers from pointer target type
无论选项如何,GCC都会将文字放入只读内存部分,除非另有说明-fwritable-strings
(但是此选项已从最近的GCC版本中删除)。
命令行参数不是const,它们通常存在于堆栈中。
- 3 回答
- 0 关注
- 695 浏览
添加回答
举报
0/150
提交
取消