One of my assignments in to write my own UNIX Shell. To receive input from the user, I am using fgets to capture the input as a string but I'm not really sure how it works. When I run:
char command[50];
fgets(command, sizeof(command), stdin);
printf("Your Command: %s", &command);
int length = strlen(command);
printf("Length of String: %d\n", length);
Lets say my the input was "exit". strlen says that the string is 5 characters long, instead of four. I want to do this:
if( (strcmp(command, "exit")) == 0 ){
doSomething();
}
but command is never equaling the string that I want it to; its like it has an unknown character that Im not sure of. Is it the null character at the end? How do I change the if statement to check that the user input caught with fgets equals "exit"? Thanks!
fgets
considers the line terminator as a valid character. That's the extra character you are receiving.
Just do something like command[strlen(command) - 1] = '\0';
to remove the line terminator. Then you are free to do all your strcmp
's.
From the fgets
manual page:
fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A '\0' is stored after the last character in the buffer.
Bottom-line: you have an extra newline at the end of your string when comparing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With