Programming Language AINSI C Book
There is an example from the book which is about a program that reads a set of text lines and prints the longest. I've understood almost all of the logic of the program but there is a piece of code bothering me. I can't understand "if (max > 0) printf("%s", longest); " Let's say the input is abcde then longest[0] will be a longest[1] will be b etc... But how can this program print the longest just by %s and longest. I know that arrays name act as a pointer. So longest will be longest[0] and thus only output should be 'a' according to my knowledge. I'd like to know when we write printf("%s", longest); does the program get all of the array one by one such as longest[0], longest [1] ... ? If not how does this part work? #include <stdio.h> #define MAXLINE 1000 /* maximum input line size */ int getline ( char line[], int maxline); void copy ( char to[], char from[]); /* print longest input line */ main() { int len; /* current line lenght */ int max; /* maximum lenght seen so far */ char line [MAXLINE]; /*current input line */ char longest [MAXLINE]; /* longest line saved here */ max = 0; while ( (len = getline(line, MAXLINE)) > 0 ) { if ( len > max) { max = len; copy(longest, line); } if (max > 0) printf("%s", longest); } return 0; } /* getline: read a line into s, return lenght */ int getline(char s[], int lim) { int c, i; for ( i = 0; i < lim -1 && ( c = getchar()) != EOF && c != '\n' ; ++i ) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[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; }