CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): sanova (RIDER)
날 짜 (Date): 2010년 02월 11일 (목) 오후 03시 38분 22초
제 목(Title): Re: C 언어 몰라던 사실 하나 더..



 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..
>
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.