>> Edit article
이름
제목
패스워드
: 다음 함수로 문자열을 받아서 길이를 구합니다 : : 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