: : 다음 함수로 문자열을 받아서 길이를 구합니다
: :
: : 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
:
: 이렇게 되는 것입니다.
친절히 설명해 주셔서 정말 감사합니다.
많은 도움이 되었습니다.--비가안와 잠도 안와