추가 답변을 달자면,
jsj3579님 말씀대로 문자열 literal로 배열 초기화 시 size가 주어지지 않으면 literal크기(null끝 문자 포함)로 배열 size가 결정됩니다.
그러나 예를 드신 것처럼 배열크기를 2로 고정한 경우 literal "가"(한글2byte문자로 가정 + null종료 문자) 3byte 중 마지막 null문자는 배열에 들어가지 못합니다.
printf의 %s는 단순하게 메모리 상에서 null문자(0)를 만날 때까지 출력 시도합니다.
a배열 어디에도 null이 없으므로, null을 만날 때까지 a 배열 너머 메모리 영역도 출력 시도하겠죠.
a[2]는 a라는 이름의
a[2]는 a라는 이름의 배열을 3칸 잡은 거고, printf에서 a를 전부 출력시켰으면 3칸 모두가 출력되겠죠.
그런데 a[0]은 "가"가 들어가 있지만, 그 뒤의 두칸에는 그냥 쓰레기 값이 들어가 있으므로 그 값에 해당하는 문자가 출력된걸로 보이는데요...
--------------------------
피할 수 있을때 즐겨라!
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
?
a[0] 는 또 뭔가요?
--------------------------------------
2b or not 2b, that is the question
실례되는 말씀입니다만
먼저 가지고 계신 C언어 책에서 배열, char, string(null-terminated)에 대한 항목을 먼저 숙지하는 것이 선행되야할 것 같군요.
죄송합니다...
c 언어 처음 배우고 있는 사람입니다. ㅎㅎ
--------------------------------------
2b or not 2b, that is the question
좀 까칠하게 느끼셨더라도 이해해 주시길 ^^;
추가 답변을 달자면,
jsj3579님 말씀대로 문자열 literal로 배열 초기화 시 size가 주어지지 않으면 literal크기(null끝 문자 포함)로 배열 size가 결정됩니다.
그러나 예를 드신 것처럼 배열크기를 2로 고정한 경우 literal "가"(한글2byte문자로 가정 + null종료 문자) 3byte 중 마지막 null문자는 배열에 들어가지 못합니다.
printf의 %s는 단순하게 메모리 상에서 null문자(0)를 만날 때까지 출력 시도합니다.
a배열 어디에도 null이 없으므로, null을 만날 때까지 a 배열 너머 메모리 영역도 출력 시도하겠죠.
그냥 널 캐릭터
그냥 널 캐릭터 들어갈 자리가 없어서 뒤에꺼가 프린트 되는거 아닌가요?
a[2]면 size가 2바이트니까요
아 이해되었습니다.
감사해요.
a[3] 이라 하면 a[0], a[1], a[2] , a[3] 까지 사용되는 줄 알고 착각하고 있었습니다.
--------------------------------------
2b or not 2b, that is the question
댓글 달기