문자열에 const char * 형식을 사용하는 이유

사무엘 브로디 1249

다음 두 가지 형식의 문자열을 만듭니다.

const char* pt1 = "Hello";
      char* pt2 = "Goodbye";

const의 용도는 무엇입니까 ? 내 이해에서 다음을 수행합니다.

ptr = "Adios";

포인터의 주소를 변경하기 때문에 둘 다 작동하지만 문자열의 문자를 변경하려고하면 둘 다 실패합니다.

const char* pt1 = "Hello";

컴파일러 오류 : 읽기 전용 위치 할당

char* pt2 = "Goodbye";

런타임 오류 : seg 오류, .rodata 변경 시도

동일한 결과 (예 : 오류)를 생성하기 때문에 const문자열을 정의 할 때 사용 하면 어떤 이점이 있습니까?

chqrlie

문자열 상수 (일명 문자열 리터럴)를 가리키는 포인터를 정의 const char *하면 컴파일러가 잘못된 액세스를 감지 할 수 있습니다. 코드의 다른 곳에서 어떤 pt1지점을 가리키고 있는지 수정하는 *pt1 = 'A';반면 pt1type이 있으면 런타임에 정의되지 않은 동작 char *이 발생합니다. 일부 아키텍처의 충돌 및 덜 분명하지만 잠재적으로 다른 아키텍처에 대한 부작용이 더 많습니다.

이 주제를 확장하기 위해 때때로 const포인터 정의 의 의미에 대해 혼동이 있습니다 .

const char *pt1 = "Hello";이를 통해 수정할 수없는 pt1배열을 가리키는 수정 가능한 포인터 정의 char합니다. "Hello"은 문자열 상수 이므로 pt1. pt1다른 문자열을 가리 키도록 char수정하거나 수정 가능 여부를 지정하거나로 설정할 수 NULL있습니다.

char *pt2 = "Hello";이를 통해 수정할 수 pt2있는 배열을 가리키는 수정 가능한 포인터 정의 char합니다. C 표준은 이력 "Hello"코드와의 호환성 위해 의 일관성에도 불구하고이를 허용 합니다. gccclang-Wwrite-strings명령 줄 옵션을 사용하여이 동작을 비활성화 할 수 있습니다 . 일반적인 실수를 피하기 위해 이것과 더 많은 경고를 사용하는 것이 좋습니다.

const char * const pt3 = "Hello";이를 통해 수정할 수없는 pt3배열을 가리키는 상수 포인터 정의 char합니다. pt3다른 문자열을 가리 키도록 수정하거나로 설정할 수 없습니다 NULL.

char * const pt4 = "Hello";이를 통해 수정할 수 pt4있는 배열을 가리키는 상수 포인터 정의 char합니다. pt4초기화 된 후에는 변경할 수 없습니다.

char그리고 const어떤 순서로 배치하지만 여부는 할 수있다 const(가) 이전 또는 이후 *에 큰 차이가 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관