이 코드로 인해 오류가 발생하는 이유는 무엇입니까? 그것은 zbcde 출력 안된다?인쇄 문자열에 예기치 않은 오류가 발생했습니다.
int main()
{
char *p="abcde";
*p='z';
printf("%s\n",p);
return 0;
}
이 코드로 인해 오류가 발생하는 이유는 무엇입니까? 그것은 zbcde 출력 안된다?인쇄 문자열에 예기치 않은 오류가 발생했습니다.
int main()
{
char *p="abcde";
*p='z';
printf("%s\n",p);
return 0;
}
문자열 리터럴을 수정하려고합니다. 정의되지 않은 동작입니다.
추가 설명 : "abcde"는 char *
이 아니라 const char *
이 아닙니다. 당신은 다음 방법 중 하나를 수행해야합니다
char p[] = "abcde";
또는
char *p = strdup("abcde");
(후자의 경우는() 무료로 페이지를 잊지 마세요!)
char *p="abcde";
-이 유지됩니다 텍스트 세그먼트의 문자열 abcde
은 읽기 전용 데이터이며 주소는 로컬 포인터 변수 p
에 보관됩니다.
*p = 'z'
은 읽기 전용 데이터 a
을 z
으로 바꿉니다. 충돌로 이어질 수있는 정의되지 않은 동작입니다.
다음과 같이 문자열을 로컬 char 배열 변수로 선언하십시오.
char p[] = "abcde"
동적 메모리를 할당하여 아래 문자열을 유지하십시오.
char *p = strdup("abcde");
...
free(p);