C中字符串文字的生命周期是多少?

在以下程序中,字符串文字"zero""non-zero" "zero"的生命周期是多少?

 #include  #include  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; } 

我从C FAQ列表中的这个问题中知道"zero""non-zero"是(或者至少是允许的)只读。 我假设这就是为什么我必须在char*声明之前输入const来停止编译器关于“… discards’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

字符串文字具有静态存储持续时间(即它们的生命周期是程序的执行时间)。

见C标准的§6.4.5/ 6 。