I am trying to run this example from (dennis ritchie book), however it does not find the longest line, any idea?
main.c
#include <stdio.h> #include <stdlib.h> #include "other.h" int main() { /*printf("Hello world!n"); printf("%dn",getmynumber()); start of a new program%= */ int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while ((len = getLine(line, MAXLINE)) > 0 ) if (len > max){ max = len; copyL(longest,line); } if (max > 0) printf("%s", longest); return 0; }
other.c
#include <stdio.h> #include "other.h" int getmynumber(void){ return 7; } 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] = ''; return i; } void copyL(char to[], char from[]) { int i; i = 0; while ((to[i], from[i]) != '') ++i; }
other.h
#ifndef OTHER_H_INCLUDED #define OTHER_H_INCLUDED #define MAXLINE 1000 int getmynumber(void); int getLine(char line[], int maxline); void copyL(char to[], char from[]); #endif // OTHER_H_INCLUDED
Using debugger: looks like i in copyL function does not increment… any ideas why?
FIX:
while ((to[i] = from[i]) != ''){ ++i; }
Advertisement
Answer
I think you incorrectly transcribed the code. This line:
while ((to[i], from[i]) != '')
is probably incorrect. The expression (to[i], from[i])
is an instance of the comma operator which produces its right hand side as the resulting value. I believe it should instead have been an assignment.