以下程序中字符串文字"zero"
和"non-zero"
的使用寿命是多少?C中字符串文字的寿命是多少?
#include <stdlib.h>
#include <stdio.h>
const char* tester(int inp)
{
const char *retval=NULL;
if (inp==0)
retval="zero";
else
retval="non-zero";
return retval;
}
int main()
{
const char *outval=NULL;
outval=tester(0);
printf("0 is %s\n",outval);
outval=tester(1);
printf("1 is %s\n",outval);
return EXIT_SUCCESS;
}
我知道从那个this question in the C FAQ list和"zero"
是"non-zero"
(或者至少允许为)只读。我认为这就是为什么我必须在char*
声明之前加上const
s来停止编译器关于“...放弃const'限定符...”的警告。不过,虽然程序给出的
0预期的结果是零
1是非零
我也知道,tester
不能被定义为:
char* tester(int inp)
{
char retval[9];
if (inp==0)
strcpy(retval,"zero");
else
strcpy(retval,"non-zero");
return retval;
}
,因为tester
退出时必须假定排列retval
。
因此,我可以做我在原代码中做过的事情,还是必须使用malloc
?
'const'并不意味着只读。除了'enum'常量,C没有符号常量。 – Olaf
如果你使用返回变量,将你的常量复制到一个自动变量中会缩短它的寿命!分配给一个指针的作品。 –