카테고리 없음

[C ++] 문자열 리터럴 조작-문자 복사

행복을전해요 2020. 12. 21. 23:38

기본적으로 끈 리터럴은 일정하며 변경할 수 없습니다. 다음 줄에서 :

char *a="123456";

char *a상수 메모리 블록을 가리 키기 const char * a때문에 로 교체해야합니다 a. 함수 아래에서 상수 메모리 블록을 변경하려고 시도하면 런타임 오류가 발생합니다.

이러한 함수에서 사용할 수있는 실제 문자 배열을 얻으려면 다음을 사용해야합니다.

char a[] = "123456";

이렇게하면 자유롭게 조작 할 수있는 가변 (비상 수) 배열이 생성됩니다.

-------------------

const 데이터는 변경할 수 없습니다. 사용자가 제공하는 이러한 문자열 (리터럴 문자열)은 프로그램의 읽기 전용 영역에 저장됩니다. 사실, 프로그램에서 제공하는 모든 문자열 리터럴 (예 :) "000000"이 고려되므로 const char*(불변 문자에 대한 포인터) 수정이 허용되지 않습니다 (적어도 권장되지 않음).

-------------------

컴파일러가 일반적으로 실행 파일의 읽기 전용 부분에 배치하는 리터럴을 수정하려고합니다. 최신 프로세서에는 바이러스에 대한 도움으로 이러한 일이 발생하지 않도록 하드웨어 잠금이 있습니다.

리터럴로 초기화 할 수있는 고유 한 문자 배열을 제공하여 수정할 수 있습니다.

char b[] = "000000";
-------------------

문자열 리터럴에서 가져온 이러한 값을 변경할 수 없기 때문에 *d=*c둘 다 *d='\0'깨졌습니다. 수정할 수 없습니다. const예상대로 사용했다면 실수하지 않았을 것입니다.

-------------------

포인터 c와 d를 모두 상수 문자열에 할당 했으므로 변경할 수 없습니다! 이것이 작동하려면 d에 대한 char 배열을 할당해야합니다.

char d[MAX_CHAR];


출처
https://stackoverflow.com/questions/7420025