[ 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.. > |