在C语言中,如何处理字符串字面量的地址

8
char **s = &"Is this valid?";

在C语言中,获取字符串文字存储地址的行为是被允许的吗?我知道字符串字面值存储在.rodata数据段中。然而,获取该地址的地址是没有意义的。

需要注意的是,gcc编译器会编译并生成可执行文件。


4
这句话的意思是在使用参数-Wall -Werror时出了问题。 - Oliver Charlesworth
2个回答

11

您的示例无效:

char **s = &"Is this valid?";   // Not valid, wrong type

这是有效的:

char (*s)[15] = &"Is this valid?";  // OK

"Is this valid?"的类型是char[15]。一个指向含有15个char元素的数组的指针的类型是char (*)[15]。因此,&"Is this valid?"的类型是char (*)[15]

字符串字面值的类型是char[N+1],其中N是字符串的长度。


3

&"这是有效的吗?" 的类型为 char (*)[15](即指向长度为15的char数组的指针)。

如果使用-Wall编译,GCC会告诉你,你的代码无效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接