나는이 기능을 우연히 answerthis question에 : 나는 리터럴 문자열에 대한 포인터를 반환하는 일을한다는 놀라운 사실을 발견, 그리고 내가 생각했던 것처럼 세그 폴트하지 않았다리터럴 문자열은 어디에 배치되며 왜 포인터를 반환 할 수 있습니까?
/* Note: I've formatted the code for readability. */
const char * getString() {
const char *x = "abcstring";
return x;
}
. 저는 항상 리터럴이 스택에 밀려나거나 다른 임시 메모리를 사용한다고 가정했지만, 함수의 범위는 제한되어있었습니다. 하지만 여기서 그들은 상상했던 것보다 더 정적 인 것처럼 보입니다. 그런 다음 실행 파일 전체에 대해 전역적인 문자열 풀 (sort pool)의 일종으로 배치됩니까?
또한 함수에 매개 변수로 문자열 리터럴을 전달하면 똑같은가요? 예 :
/* Where is the string literal in this example being placed? */
myfunc(value1, value2, "rainbowdash");
나는 누군가가 내게 계몽되기를 바랍니다. 미리 감사드립니다! :)
바이너리의'.data' 섹션에 저장하고 있다고 생각합니다. 코드를 배열로 변경하면 :'const char x [] = "abcstring";'문자열이 스택에 저장됩니다. – Pubby
관련 항목 : http://stackoverflow.com/q/3570687/20862 –
가능한 속담 : http://stackoverflow.com/questions/2589949/ – ellotheth