Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

배열의 끝을 어떻게 확인하죠?

1,325 views
Skip to first unread message

Puhaha

unread,
Dec 9, 2003, 9:51:04 PM12/9/03
to
int 등 숫자배열에선 끝을 자동으로 인식하지만 왜 char배열에선 끝을 자동으로
인식하지 못해 널문자를 붙이는지요?

그러니까 이렇게요

int a[] = {1,2,3,4}
이렇게 하는 건 되지만
char a[] = {'a','b','c','d','\0'}
char 배열에선 왜 널문자를 붙여야 되는지요?


Jun Woong

unread,
Dec 10, 2003, 12:26:44 AM12/10/03
to

"Puhaha" <arond...@hanmir.com> wrote in message news:sSvBb.107044$ln3.2...@news.bora.net...

char a[] = { 'a', 'b', 'c', 'd' };

하는 것도 가능합니다. 문제는 이렇게 배열을 구성할 경우, (null
character 를 통해 끝을 알 수 있는) string 이 아닌 (다른 방법을 통해
끝을 기억해야 하는) array of characters 로만 쓰일 수 있다는 것입니다.
C 에서 string 과 array of characters 는 엄연히 다른 개념입니다.

(IT 백두대간 C 언어, p.403, pp.468-470)


--
Jun, Woong (mycoboco at hanmail.net)
Information and Communications Univ.


Puhaha

unread,
Dec 10, 2003, 1:46:47 AM12/10/03
to
그렇다면 이 배열의 끝에 쓰레기값이 붙지 않는다는 건가요?

"Jun Woong" <myco...@hanmail.net> wrote in message
news:br6ak5$fpj$1...@news.hananet.net...

Puhaha

unread,
Dec 10, 2003, 1:54:56 AM12/10/03
to
그럼

char a[] = "abcd"; 와 char a[] = {'a','b','c','d'}; 는 다른 건가요?


"Jun Woong" <myco...@hanmail.net> wrote in message
news:br6ak5$fpj$1...@news.hananet.net...
>

Jun Woong

unread,
Dec 10, 2003, 2:02:56 AM12/10/03
to

"Puhaha" <arond...@hanmir.com> wrote in message news:rjzBb.107045$ln3.2...@news.bora.net...

> "Jun Woong" <myco...@hanmail.net> wrote in message
> news:br6ak5$fpj$1...@news.hananet.net...
> >
...

> >
> > char a[] = { 'a', 'b', 'c', 'd' };
> >
> > 하는 것도 가능합니다. 문제는 이렇게 배열을 구성할 경우, (null
> > character 를 통해 끝을 알 수 있는) string 이 아닌 (다른 방법을 통해
> > 끝을 기억해야 하는) array of characters 로만 쓰일 수 있다는 것입니다.
> > C 에서 string 과 array of characters 는 엄연히 다른 개념입니다.
> >
> > (IT 백두대간 C 언어, p.403, pp.468-470)
> >
>
> 그렇다면 이 배열의 끝에 쓰레기값이 붙지 않는다는 건가요?
>

어떠한 배열에도 (적절히 초기화 된다면) 쓰레기값이 붙지 않습니다. 님께
서는 "쓰레기값" 으로

char a[] = { 'a', 'b', 'c' , 'd' );
printf("%s\n", a); /* wrong */

와 같이 출력했을 때 보이는 abcd 이후의 (알 수 없는) 값을 의미하고 계시
지만, 이는 순수한 array of char 를 string 이 요구되는 문맥 (printf()
의 "%s") 에 전달했기 때문에 발생하는 문제이지 배열에 쓰레기값이 붙어있
기 때문이 아닙니다.

string 은 array of char 이지만 그 끝을 0 값의 null character 로 알 수
있도록 하자는 추가적인 약속을 갖는 개념일 뿐입니다. 예를 들어, 어떤
프로그램에서 int 형 배열의 끝을 -1 로 하자고 약속한다면,

int a[] = { 1, 2, 3, 4, -1 };
int *p = a;

while (*p != -1)
printf("%d\n", *p++);

와 같이 작성할 수도 있습니다. 만약, 이 프로그램에

int a[] = { 1, 2, 3, 4 };

를 사용한다면, 당연히 (끝에 -1 을 둔다는 약속을 어겼으므로) 그 끝을 알
수 없으니 님이 말씀하시는 "쓰레기값" 이 붙는 것처럼 보일 것입니다.
printf() 의 "%s" 처럼 (그 끝을 null character 를 통해 인식할 수 있는)
string 을 요구하는 문맥에 string 의 조건을 만족하지 않는 array of char
를 전달했을 때의 행동 역시 위의 예와 동일한 것 뿐입니다.

Jun Woong

unread,
Dec 10, 2003, 2:04:41 AM12/10/03
to

"Puhaha" <arond...@hanmir.com> wrote in message news:4rzBb.107047$ln3.2...@news.bora.net...

> 그럼
>
> char a[] = "abcd"; 와 char a[] = {'a','b','c','d'}; 는 다른 건가요?
>

char a[] = "abcd";

char a[] = { 'a', 'b', 'c', 'd', '\0' };

를 편하게 쓰는 방법일 뿐입니다.

추측과 실습을 통해서 언어를 공부하는 것 보다는, 제대로 된 이론과 실습
을 통해 언어를 공부하시는 것이 더 나을 것 같습니다.

아군대용

unread,
Apr 29, 2022, 10:44:46 AM4/29/22
to
2003년 12월 10일 수요일 오후 4시 4분 41초 UTC+9에 Jun Woong님이 작성한 내용:
> "Puhaha" <arond...@hanmir.com> wrote in message news:4rzBb.107047$ln3.2...@news.bora.net...
> > 그럼
> >
> > char a[] = "abcd"; 와 char a[] = {'a','b','c','d'}; 는 다른 건가요?
> >
> char a[] = "abcd";
> 는
> char a[] = { 'a', 'b', 'c', 'd', '\0' };
> 를 편하게 쓰는 방법일 뿐입니다.
> 추측과 실습을 통해서 언어를 공부하는 것 보다는, 제대로 된 이론과 실습
> 을 통해 언어를 공부하시는 것이 더 나을 것 같습니다.
> --
아하! 그렇군요!! 그것덕분에 제가 exam02 06번을 틀리게 된 것이구ㅠㄴ요!@ 정말 유익한정보 감사합니다!!
0 new messages