Utter Stupidity

I feel utterly stupid asking this question, especially since I have been programming in C for almost 3 years now;  but it's really bugging me.  I am using G++ under FreeBSD 2.1.6; here is the main source to the loop:

  while (!feof(infile1)) {
    fgets(s1, 4096, infile1);
    fgets(s2, 4096, infile2);
    if (strlen(s1)==strlen(s2)) {
      if (strcmp(s1, s2)==0) fputs(s1, outfile);

All of the files are opened correctly, the variables are typecast correctly, etc -- it's nothing to do with simple mechanics. Unfortunately, it seems like this loop NEVER exits.  I've monitored feof(infile) to see when the EOF is set and it's detecting it; however, the loop never exits.  As a result, the program crashes with "Segmentation Fault (Core Dump)".  It doesn't lock the computer and the output file is always 100% correct -- it just doesn't ever want to quit.

The data I am working with is just two simple text files.  This loop is supposed to compare the two files (in text mode), line by line, and write any matching lines to the output file.
Who is Participating?
jos010697Connect With a Mentor Commented:
For one thing, the logic of your program fragment is faulty,
i.e. the feof() function does not _predict_ whether or not
the next read would bump into an eof condition, it just
tells you if the last read encountered an eof condition.

If the fgets() function bumps into an eof condition (withouit
having read anything), it returns a NULL pointer value.

Something like the following would do the job for you:

while (fgets(s1, 4096, infile1) && fgets(s2, 4096, inflie2)) {
   /* process the lines read */

if (feof(infile1))
   if (!feof(infile2))
      /* infile1 was shorter ... */
/* etc. */

kind regards,

Jos aka jos@and.nl
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.