为了账号安全,请及时绑定邮箱和手机立即绑定

字符串文字是常量吗?

字符串文字是常量吗?

C
肥皂起泡泡 2019-07-27 14:38:59
字符串文字是常量吗?如果我将一个字符串文字分配给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:它指向一个指向字符串的指针数组。这些字符串是明确可修改的。您可以更改它们,并且需要保留最后存储的值。


查看完整回答
反对 回复 2019-07-27
?
莫回无

TA贡献1865条经验 获得超7个赞

使用-Wwrite-strings选项,您将获得:

warning: initialization discards qualifiers from pointer target type

无论选项如何,GCC都会将文字放入只读内存部分,除非另有说明-fwritable-strings(但是此选项已从最近的GCC版本中删除)。

命令行参数不是const,它们通常存在于堆栈中。


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 695 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信