기본적으로 끈 리터럴은 일정하며 변경할 수 없습니다. 다음 줄에서 :
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