우리가이 코드 조각을 실행하면 화면에 정상적으로 인쇄 string constant
작동합니다이 경우 char []와 char *가 어떻게 다른가요?
char *someFun(){
char *temp = "string constant";
return temp;
}
int main(){
puts(someFun());
}
을하지만 우리는 다음과 유사한 코드를 실행하면, 작동 및 화면에 약간의 쓰레기를 인쇄하지 않습니다
char *someFun1(){
char temp[ ] = "string";
return temp;
}
int main(){
puts(someFun1());
}
이유가 무엇입니까? 본질적으로 두 함수 모두 비슷한 일을하지만 (즉, "문자열"을 반환), 여전히 다르게 작동합니다. 왜 그런가요?
'someFun1()'에서 지역 변수 (배열)가 이전에 사용한 공간을 사용하여 리턴 주소와 프레임 포인터와 같은 제어 정보와'puts()'의 지역 변수를 사용할 수 있습니다. –
덧붙여 말하면, 문자열 리터럴을 처리 할 때 문제가 발생하지 않도록하려면 const char * 변수 안에 포인터를 저장해야합니다. 따라서 컴파일러가 수정하려고하면 차단합니다. –