>> Delete Reply from No. 59834 article
No. RE: C , 배열로 문자열을 받는데 이해가 잘 안가네요

등록 2002-10-27 23:29:00 By localhost     조회 5
이름 Les.    

		: 다음 함수로 문자열을 받아서 길이를 구합니다
:
: int getline( char <>, int lim ) /* lim : max length */
: {
:     int c, i;
:
:     for(i=0; i<lim-1 && (c=getchar())!=EOF && c!=''; i++)
:         s[i] = c;
:     if (c == '') {
:         s[i] = c;
:         i++;
:     }
:     s[i] = '';
:     return i;
: }
: 
: 코드의 for 문에서 lim 가 만약 10이라면 문자를 8개만 읽
게 
: 되는 것 아닌가요? 그리고 다음 if 문에서 을 받아서 넣고 
: 마지막 s[9]에다가 을 넣
는 건가요? <= 이렇게 이해했음 
: 
: 그렇다면 중간에 if문이 구지 필요가 없을 것 같은데요

: 그리고 만약 문자열 끝에 이 포함되어 있지 않다면 9개가 아닌 
: 8개밖에 구할 수 없을 것
:  같은데요..
: 다르게 테스트 해보니 생각하는 것이랑 틀리게 되네요..
: 설명좀 부탁드립니다
: 
: --
: 비나 왔으면 좋겠다
 쓰여져 있는 코드는 콘솔상에서 한 라인을 입력받는 함수입니다.
buffer overflow 를 방지하기 위해서 최대 입력받을수 있는 길이가
아규먼트로 전달되고, 첫번째 아규먼트에 입력받은 라인을 넣습니다.
 두번째 아규먼트에 대해서 정확히 해야 할 점이 잇는데..
최대 입력받는 길이가 아닌, 첫번째 아규먼트의 크기를 의미하는거
같습니다.
 예로 드신 lim == 10 인 경우에는..(첫 아규먼트가 s 인거 같군요..)
첫번째 아규먼트 크기가 10이라는 의미라고 생각하고 분석해 보시면
s 는 0 ~ 9 까지의 인덱스를 가지며..
첫번째 for 문에서는 '' 문자나 입력의 끝, 혹은 i 가 9 미만일때까지
문자를 읽어서 배열에 넣습니다.
그리고 그 다음 if 문에서  문자가 입력되었으면 '' 문자도 넣습니다.
그리고 마지막 부분에서 '' 문자를 넣어서 문자열의 끝을 확실히 하죠.
 한번 예를 들어보죠...
1) long_enough_to_over_10_char
2) short
3) a<Ctrl+D>       <- <Ctrl+D> 는 Ctrl+D 를 눌렀다는 의미입니다.
 1) 번의 경우에서는 long_enou 까지 배열에 들어가고 '' 문자가 
맨 마지막에 추가된 다음 함수가 끝납니다.
2) 에서는 short 를 배열에 넣고, if 문에 의해서 '' 까지 배열에 
들어간 다음 '' 문자 추가.
3) 에서는 a 가 들어가고, 그다음 '' 문자.
  -> '' 을 의미, _ -> '' 을 의미
   0 1 2 3 4 5 6 7 8 9
1) l o n g _ e n o u 
2) s h o r t _ 
3) a 
 이렇게 되는 것입니다.
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved