以下程序中字符串文字"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*
聲明之前加上const
s來停止編譯器關於「...放棄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
?
'const'並不意味着只讀。除了'enum'常量,C沒有符號常量。 – Olaf
如果你使用返回變量,將你的常量複製到一個自動變量中會縮短它的壽命!分配給一個指針的作品。 –