+ 1

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; }

28th Jan 2020, 9:09 PM
mert aydın
3 Answers
+ 4
If I understood you correctly you'd like to know how printf prints array of chars despite only knowing the address of the first element. In C strings or rather arrays of chars have a null character '\0' at the end that determines the end of the string. So the string "abc" actually is { 'a', 'b', 'c', '\0' }. printf simply starts at the first char and prints every following char until '\0' is reached.
28th Jan 2020, 9:16 PM
Aaron Eberhardt
Aaron Eberhardt - avatar
+ 1
Yes I wanted to know that. Thank you very much. Now it makes sense. Have a nice day. I appreciate it :)
28th Jan 2020, 9:17 PM
mert aydın