2012-12-19 4 views
0

이 코드는 C 응답 북에서 발견되었습니다. 이 함수들의 차이점은 무엇입니까?

int readline(char s[], int lim) { 
    int i,c,j=0; 
    for(i=0; (c=getchar())!=EOF && c!='\n'; ++i) { 
     if(i<lim-2) { 
      s[j]=c; 
      ++j; 
     } 
    } 
    if(c=='\n') { 
     s[j]=c; 
     ++j; 
     ++i; 
    } 
    s[j]='\0'; 
    return i; 
} 

내가 내 버전 썼다 : 나는 카운터하지만 원래 버전으로 하나 개의 변수 ' i'를 사용했다

int readline(char line[], int lim) { 
    int c, i; 
    for(i=0; (c=getchar())!=EOF && c!='\n'; ++i) { 
     if(i<lim-2) { 
      line[i]=c; 
     } 
    } 
    if(c=='\n') { 
     line[i]=c; 
     ++i; 
    } 
    line[i]='\0'; 
    return i; 
} 

은 카운터로 'j'이 'i'변수 사용하고있다. 둘의 차이점은 무엇입니까?

어떻게 다릅니 까?

답변

5

함수의 두 번째 버전은 초기화되지 않은 line 부분과 위험 초기 루프 i<lim-2

3

경우 넘어 계속 경우에 line 버퍼의 끝 이후 최종 '\ n을', '\ 0'기입을 남긴다 더 lim-2 자보다 사용자의 입력은, 첫 번째 버전은 제대로 작동하고, 두 번째는 line의 끝을지나 기록 :

if(c=='\n') { 
    line[i]=c; <<=== here 
    ++i; 
} 
line[i]='\0'; <<=== and here 

이것은 실제로 두 개의 변수가 필요 의미하지 않는다. 하나를 사용할 수는 있지만 루프가 끝나면 끝내야합니다. 생각하는대로 코드를 읽기 쉽게 만듭니다.

+0

변수를 어떻게 제한합니까? – ShuklaSannidhya

+2

@ SandyLee_user53167 : 최대 값보다 큰 지 확인하고, 최대 값보다 큰 경우 참조하십시오. – NPE

관련 문제