可能重复:
字符串文字是否为常量?
以下是否在ANSI C中有效?
#include <stdio.h>
/* This returns "Hans" if arg != 0, "Gretel" if arg == 0 */
char* foo(int arg)
{
return arg ? "Hans" : "Gretel";
}
int main()
{
char* p_ch;
p_ch = foo(1);
printf("%s\n", p_ch);
p_ch = foo(0);
printf("%s\n", p_ch);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该代码在GCC/Linux下编译并运行良好.
MinGW/Windows说:
invalid conversion from `const char*' to `char*'
Run Code Online (Sandbox Code Playgroud)
MS Visual C/C++ 2008对代码很好.
char*变量分配给文本字符串,而不是在初始化时吗?static位置类.这是否意味着它们在定义的函数之外是不可见的?const类型到非const对应的转换何时无效?是的,这是有效的标准C.但是,它只是有效的,因为字符串文字具有char[]向后兼容性的类型; 你应该做的返回值从foo一个const char*安全.写入任何返回的字符串都会foo引发未定义的行为.
如果您的编译器抱怨这一点,那么您可能不小心使用了C++编译器.在C++中,字符串文字具有类型const char [].(如果更改char*为const char*,您的程序也会神奇地成为有效的C++程序.)
我可以将
char*变量分配给文本字符串,而不是在初始化时吗?
你的意思是
char *p;
// do some other stuff
p = "literal";
Run Code Online (Sandbox Code Playgroud)
?是的,这是可能的.
我已经读过字符串文字有静态分配类.这是否意味着它们在定义的函数之外是不可见的?
你会混淆静态分配和static变量.您当然可以foo在另一个翻译单元中使用结果.
从const类型到非const对应的转换何时无效?
正式自1989年以来,当const被介绍给C.你必须明确地抛弃它const.
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |