Section 1.9 Character Arrays

Program

#include <stdio.h>

#define MAXLINE 1000 /* maximum input line length */

int mgetline(char line[], int maxline);

void copy(char to[], char from[]);

/* print the longest input line */
int main() {
    int len;               /* current line length */
    int max;               /* maximum length seen so far */
    char line[MAXLINE];    /* current input line */
    char longest[MAXLINE]; /* longest line saved here */
    max = 0;
    while ((len = mgetline(line, MAXLINE)) > 0)
        if (len > max) {
            max = len;
            copy(longest, line);
        }
    if (max > 0) /* there was a line */
        printf("%s", longest);
    return 0;
}

/* mgetline: read a line into line, return length */
int mgetline(char line[], int maxline) {
    int c, i;
    for (i = 0; i < maxline - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
        line[i] = c;
    if (c == '\n') {
        line[i] = c;
        ++i;
    }
    line[i] = '\0';
    return i;
}

/* copy: copy 'from' into 'to'; assume to is big enough */
void copy(char to[], char from[]) {
    int i;
    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}

Explanation

In C, strings are nothing but a character arrays which end with a special character 0. In this program, we declare character arrays char line[] in the geline function and then char to[] and char from[] in the copy function. Since arrays are passed by reference, so when we send to and from the calling program, the function copies the contents to the to array and we are reference the to array further from the main program itself. This is demonstrated by copying line to the longest and then printing the longest in the main program.