0

The source code is below:

#include <stdio.h>
#include <string.h>

char tracks[][80] = {
"I left my heart in Harvard Med School",
"Newark, Newark - a wonderful town",
"Dancing with a Dork",
"From here to maternity",
"The girl from Iwo Jima",
};


void find_track(char search_for[]) {
    int i;
    for (i=0; i<5; i++) {
        if (strstr(tracks[i], search_for)) {
            printf("Track %i: '%s'\n", i, tracks[i]);
        }
    }
}

int main() {
    char search_for[80];
    printf("Search for:");
    fgets(search_for, 80, stdin);
    find_track(search_for);
    return 0;
}

When I use the program as follows:

Search for:town

I would expect something like

Track 1: 'Newark, Newark - a wonderful town'

Instead my program exits and does not print anything. What am I doing wrong?

deltanovember
  • 42,611
  • 64
  • 162
  • 244

1 Answers1

5
fgets(search_for, 80, stdin);

leaves the newline used to send the input to the programme in the input buffer, so the string passed to strstr as second argument is in fact

"town\n"

and that is not a substring of any of the tracks, so no match is found and nothing printed.

Remove the newline from the buffer,

size_t n = strlen(search_for);
if (n > 0 && search_for[n-1] == '\n') {
    search_for[n-1] = 0;
}

to have it search for "town".

Daniel Fischer
  • 181,706
  • 17
  • 308
  • 431