这些功能之间有什么不同?

Shu*_*hya 0 c arrays string algorithm char

我在The C Answer Book中找到了这段代码.

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;
}
Run Code Online (Sandbox Code Playgroud)

我写了我的版本:

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;
}
Run Code Online (Sandbox Code Playgroud)

我只使用了一个变量' i'作为计数器,但原始版本使用了两个变量' i'和' j'作为计数器.两者有什么区别?

请告诉我他们有什么不同?

sim*_*onc 5

该函数的第二个版本留下的一部分line超出了年底未初始化和风险写入该最终"\n","\ 0" line的情况下缓冲其中初始循环继续超越i<lim-2