strcmp on a line read with fgets

strcmp is one of the few functions that has the reverse results of true and false…if the strings are equal, the result is 0, not 1 as you would think….

if (strcmp(a, b)) {
    /* Do something here as the strings are not equal */
} else {
    /* Strings are equal */
}

Speaking of fgets, there is a likelihood that there is a newline attached to the end of the string…you need to get rid of it…

+-+-+-+--+--+
|b|o|b|\n|\0|
+-+-+-+--+--+

To get rid of the newline do this.
CAVEATS: Do not use “strlen(aName) – 1”, because a line returned by fgets may start with the NUL character – thus the index into the buffer becomes -1:

aName[strcspn(aName, "\n")] = '\0';

+-+-+-+--+
|b|o|b|\0|
+-+-+-+--+

Now, strcmp should return 0…

Leave a Comment