求解程序注释,该如何处理

求解程序注释
由于刚刚入手C程序,现在做习题,但对本程序不是很清楚,请高手给予详细注释,谢谢!
C/C++ code
#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);

main() 
{
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];

    max = 0;
    while((len = getline(line,MAXLINE)) > 0) {
        printf("%d, %s", len,line);
        if(len > max) {
            max = len;
            copy(longest, line);
        }
    }
    if(max > 0)
        printf("%s",longest);
    return 0;
}

int getline(char s[], int lim)
{
    int c, i, j;
    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;
}

void copy(char to[], char from[])
{
    int i;
    while((to[i] = from[i]) != '\0')
        ++i;
}


------解决方案--------------------
字符数上限是MAXLINE,最后留两个字符的位置,一个放'\n',一个放'\0'。 所以是总数减2