2017-04-19 78 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

相關問題