2012-08-14 4 views

답변

2

문자열 리터럴을 수정하려고합니다. 정의되지 않은 동작입니다.

추가 설명 : "abcde"는 char *이 아니라 const char *이 아닙니다. 당신은 다음 방법 중 하나를 수행해야합니다

char p[] = "abcde"; 

또는

char *p = strdup("abcde"); 

(후자의 경우는() 무료로 페이지를 잊지 마세요!)

2

char *p="abcde"; -이 유지됩니다 텍스트 세그먼트의 문자열 abcde은 읽기 전용 데이터이며 주소는 로컬 포인터 변수 p에 보관됩니다.

*p = 'z'은 읽기 전용 데이터 az으로 바꿉니다. 충돌로 이어질 수있는 정의되지 않은 동작입니다.

다음과 같이 문자열을 로컬 char 배열 변수로 선언하십시오.

char p[] = "abcde" 

동적 메모리를 할당하여 아래 문자열을 유지하십시오.

char *p = strdup("abcde"); 
... 
free(p); 
관련 문제