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

时间:2017-04-19 19:11:18

标签: c

以下程序中字符串文字"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

1 个答案:

答案 0 :(得分:1)

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

参见C标准的§6.4.5/6