다음 프로그램에서 문자열 리터럴 "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;
}
내가 "zero"
및 "non-zero"
가 (또는 적어도 할 수 있습니다)되어 this question in the C FAQ list에서 알고 읽기 전용입니다. 나는 그것이 "... discards 'const'qualifier ..."에 대한 컴파일러의 경고를 막기 위해 char*
선언 앞에 const
을 넣어야 만했던 이유라고 생각합니다. 프로그램이
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
을 사용해야합니까?
'const'는 읽기 전용을 의미하지 않습니다. C에는'enum' 상수 이외의 기호 상수가 없습니다. – Olaf
자동 변수에서 상수를 복사하면 반환 변수를 사용하면 수명이 단축됩니다! 포인터에 할당이 작동합니다. –