문자열 배열과 포인터의 초기화에 대한 질문입니다.
글쓴이: ktd2004 / 작성시간: 토, 2005/12/03 - 8:57오전
먼저 질문을 드리기 전에 제가 알고 있는 내용을 적어보겠습니다.
1번 코드
char a[6] = "12345";
- 스트링의 끝에 NUL이 자동으로 추가되는지요?
- 배열 a의 데이타의 수정은 가능한지요?
2번 코드
char a[] = "12345";
- 이 경우에는 스트링의 끝에 NUL이 자동으로 추가되는지요?
( sizeof(a)는 6으로 출력됩니다.)
- 배열 a의 데이타의 수정은 가능한지요?
3번 코드, 전혀 문제없는 코드.
char a[6]; strcpy( a, "12345");
4번 코드. 전혀 문제없는 코드
char *a; a = (char*)malloc(6); strcpy( a, "12345"); ... free(a);
5번 코드.
char *a = "12345";
포인트 a의 값을 수정할 수 없다.
따라서 const char *a = "12345" 식으로 초기화하는 것이 낫다.
6번 코드.
char *a; strcpy( a, "12345");
메모리가 할당되지 않았음. 잘못된 코드.
제가 궁금하게 생각하는 부분은 1,2,3번의 경우입니다.
즉, 배열을 다음과 같이 초기화 했을 때.
char a[] = "12345";
- 끝에 NUL이 추가되는지? (추가됨)
- 수정이 가능한지? (가능함.)
- sizeof(a)의 결과는? (6)
이런 경우에는
char a[] = {'1','2','3','4','5'};
- 끝에 NUL이 추가되는지? (추가되지 않음)
- 수정이 가능한지? (가능함)
- sizeof(a)의 결과는? (아마 5)
그럼 답변 부탁드리겠습니다. 즐거운 주말되시기를...
Forums:
먼저 null character는 '\0'로 표기합니다. (참고로 NUL
먼저 null character는 '\0'로 표기합니다. (참고로 NUL은 ASCII code에서
0번 control character를 가리키는 표현입니다. C 언어에서 NUL이란 용어는 쓰지 않습니다. 어차피 수치로는 같은 0이긴 하지만..) 따라서 '\0' 또는 그냥 널 문자(null character)라고 쓰기 바랍니다.
- 스트링의 끝에 '\0'이 자동으로 추가되는지요? 예.
- 배열 a의 데이타의 수정은 가능한지요? 예
- 이 경우에는 스트링의 끝에 '\0'이 자동으로 추가되는지요? 예
( sizeof(a)는 6으로 출력됩니다.)
- 배열 a의 데이타의 수정은 가능한지요? 예
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
참고로[code:1]char a[5] = "
참고로
의 경우, '\0'이 자동적으로 붙지 않습니다. (즉, 올바른 문자열이 아닙니다.) 당연 sizeof(a)는 5입니다.
경우도 '\0'이 자동적으로 붙지 않고, 이 경우는 경고(또는 에러)가
발생합니다. 초기값으로 준 문자열 상수(string literal)가 배열의 크기보다 더 크기 때문입니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기