2017-04-19 79 views
0

以下程序中字符串文字"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*声明之前加上consts来停止编译器关于“...放弃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

+0

'const'并不意味着只读。除了'enum'常量,C没有符号常量。 – Olaf

+0

如果你使用返回变量,将你的常量复制到一个自动变量中会缩短它的寿命!分配给一个指针的作品。 –

回答

1

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

参见C标准的§6.4.5/6

+2

[它在哪儿?](http://port70.net/~nsz/c/c11/n1570.html#6.4.5p5) –

+0

@eugene:修正了错字(它在第6段)并添加了链接。感谢您的HTML。 – rici

相关问题