Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[611] Re:C++ 공부를 다시 하는데... Borland C++로 아니면 Visual C++로???
김인구.구야 [whileone] 2067 읽음    2002-05-11 17:41
광양님 안녕하셨죠?
조만간 광양님 볼 날도 멀지 않았군여^^

제가 책에서 본 바로는요...

1. char name[7] = {'T', 'i', 'g', 'e', 'r', 's', '\0'};
2. char name[7] = {"Tigers"};
3. char name[7] = "Tigers";
4. char name[] = {'T', 'i', 'g', 'e', 'r', 's', '\0'};
5. char name[] = {"Tigers"};
6. char name[] = "Tigers";
7. char *name = "Tigers";

일단 7가지 모두 같은 표현입니다.

7번 표현이 문제인데요...
메모리상으로는 1~6은 7바이트를 차지하구요
7번은 9바이트를 차지합니다.
2바이트는 포인터 변수때문입니다.
윈도우는 4바이트라고 들었는데 도스는 2바이트 입니다.

그리고 7번 표현을 써서 문자 변경이 되고 안되는것은
컴파일러 마다 다르다고 합니다.
ANSI는 이 문제에 대해서 정의를 해놓지 않았다고 합니다.
책내용을 약간 수정하면
"1~6번은 배열이고 각각의 문자를 바꿀 수도 있지만 항상 일정한 장소에 저장되고
7번은 포인터라서 가리키는 '위치'를 바꿀 수 있지만 '내용'을 바꾸는 것은
정의되어 있지 않다(바꿀 수 없다는 말은 아니다)"
라고 되어있습니다.
책엔 ANSI가 정의를 하지 않은 이유는 없지만
개인적인 생각으론 정의를 하지 않은것과 빼먹은건 다르다고 생각합니다.
정의를 하지 않은 이유가 있겠죠 알게 되시면 갈쳐주시구여...

그리고 참고로...
char name[6] = "Tigers";
이라고 하면 마지막에 널문자가 빠진 '문자배열'이 됩니다.
책마다 혼용해서 쓰긴하지만 문자열과 문자배열을 구분(널문자의 유무)해서 쓰는게
좋을꺼 같습니다.

마지막으로 백일님이 말씀하신 내용과는 조금은 상반된 내용인거 같은데요
저의 개인적인 의견이 아님을 말씀드립니다.
문자열의 메모리 할당에 관해 어느 책에서 본적이 있는데 생각이 안나서요.
찾으면 다시한번 글 올리겠습니다.

+ -

관련 글 리스트
596 C++ 공부를 다시 하는데... Borland C++로 아니면 Visual C++로??? kongbw, 광양 2117 2002/05/10
611     Re:C++ 공부를 다시 하는데... Borland C++로 아니면 Visual C++로??? 김인구.구야 2067 2002/05/11
612         인구님 그동안 잘 계셨나요??? ^^; kongbw, 광양 1965 2002/05/11
597     Re:C++ 공부를 다시 하는데... Borland C++로 아니면 Visual C++로??? 김백일 2082 2002/05/10
600         Re:Re:C++ 공부를 다시 하는데... Borland C++로 아니면 Visual C++로??? kongbw, 광양 1839 2002/05/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.