char str2[] = "ABCDEF";
이건 char 7개짜리 배열을 만들어서 그 주소에다가 ABCDEF\0 을 저장하는 것이고
char *str1 = "abcdef";
이건 "abcdef"라는 constant를 만들어 놓고 str1이 그 constant를 포인트하도록
한 거 거죠
str1[1] = 'x'; // core 발생
여기서는 constant의 값을 바꾸려고 했으니 메모리 문제가 발생한 것이고
따라서
char *str1 = "abcdef";
char str2[] = "ABCDEF";
printf("size:%d %d\n", sizeof(str1), sizeof(str2));
이렇게 해 보면 결과는
size:4 7
문자열 상수를 가리키는 포인터의 크기는 4
char 변수 7개를 가지고 있는 char 배열의 크기는 7
잘못된 점 지적이나 더욱 자세한 설명은 고수님께 패스
>
> 해보니까 진짜 안되네요.
>
> 왜 그러죠?
>
>---------------------------------------------------------
>
>char *str1 = "abcdef";
>char str2[] = "ABCDEF";
>
>이 둘은 서로 다르다는걸 이틀 전의 삽질로 깨달음...
>
>str1[1] = 'x'; // core 발생
>str2[1] = 'X'; // 아무 문제 없음
>
>왜 이 두가지가 서로 동작이 다른지 이해를 못하다가,
>
>쪽팔림을 무릅쓰고 딴 사람에게 물어보고서야 이해를 했음...
>
>일개 코딩쟁이에게 C 언어는 정말 넓고도 깊구나.. OTL..
>