以下程序中字符串文字"zero"
和"non-zero"
的生命周期是多少?
#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"
是(或至少被允许)只读。我认为这就是为什么我必须在const
声明之前放入char*
s来停止编译器关于&#34; ... discards&#39; const&#39的警告;资格赛......&#34;。但是,虽然该计划给出了预期的结果
0为零
1非零
我也知道tester
不能定义为:
char* tester(int inp)
{
char retval[9];
if (inp==0)
strcpy(retval,"zero");
else
strcpy(retval,"non-zero");
return retval;
}
因为必须假定在retval
退出时处理数组tester
。
我可以做我在原始代码中所做的事情,还是必须使用malloc
?