포인터를 리터럴(또는 상수) 문자 배열( 문자열)로 되돌리기?
이것이 틀렸다는 것을 압니다.
char* getSomething() {
char szLocal[5];
/* put something in the char array somehow */
return szLocal;
}
szLocal은 함수가 돌아온 후 언제쯤 파괴될 수 있기 때문입니다.
근데 이거 괜찮아요?
char* getSomethingElse() {
return "something else";
}
그건 사실 괜찮아요.문자열 리터럴은 일반적으로 프로그램이 실행되는 동안 사용할 수 있는 불변 메모리 영역에 할당됩니다.
c/c++가 문자열 리터럴을 할당하는 시기에 대한 답도 참조하십시오.
할당 측면에서는 괜찮습니다. 문자열 리터럴은 암시적으로static
. 비품을 반품하는 것은 문제가 않습니다.const
리터럴을 가리킵니다.
수정 가능한 것을 반환하려는 경우(비-const
) 문자열, 다음과 같이 선언합니다.static char[]
. 아니면 사본을 반환하는 것이 좋습니다.
return strdup("something else");
잊지말구요free
그 후에strdup
ISO가 아니지만 거의 모든 곳에서 사용할 수 있습니다(MSVC는 제외).
문자열 리터럴의 유형은
const char *
(아래 의견 참조)static char[]
, 그러나 불변의문자열 리터럴은 정적으로 할당된 메모리에 대한 포인터를 나타냅니다.따라서:
그런 포인터를 돌려주는 것은 아주 좋습니다.
함수 반환 유형
꼭 해야 할const char*
, 즉, 반환 형식char *
적어도 경고는 해줄 겁니다함수를 사용하면 리터럴 또는
malloc
ed string 메모리 관리에 매우 신중해야 합니다.free
문자열 리터럴을 입력하면 segfault가 발생할 수 있습니다.
언급URL : https://stackoverflow.com/questions/4836534/returning-a-pointer-to-a-literal-or-constant-character-array-string
'code' 카테고리의 다른 글
PowerShell로 응용프로그램 실행 및 완료될 때까지 기다립니다. (0) | 2023.10.15 |
---|---|
Oracle - 인덱스를 만들거나 열을 추가한 후 통계를 계산해야 합니까? (0) | 2023.10.15 |
"게시 제목" 아래에서 사용자 지정 열 관리 링크 이동 (0) | 2023.10.15 |
한 요소의 모든 속성을 복사하여 다른 요소에 적용하는 방법은? (0) | 2023.10.15 |
업데이트된 도커 이미지를 Amazon ECS 작업에 배포하려면 어떻게 해야 합니까? (0) | 2023.10.15 |