C - Comparing string literal with character array

I am new to C and am still a bit confused about how to use strings via character arrays.

In my C program, I am accepting commands from the user:

char command[20]; scanf("%s",command); 

Of course, afterwards I want to figure out what command they typed (something similar to: "if (command == "hello"), then do something"). I know this is not possible in C because I am comparing a string literal to a character array, but what would be a good way to it? I have tried using strcmp(command, "hello") and still got errors.

Any advice you can provide would be very appreciated. Thank you!

8

4 Answers

I have written a complete version of what I think you are trying to do:

 #include <string.h> void main() { char command[20]; scanf("%s",command); // command and "hello" can be less than, equal or greater than! // thus, strcmp return 3 possible values if (strcmp(command, "hello") == 0) { printf("\nThe user said hello!"); } } 

Several people have commented about using scanf and they are correct, except that a new programmer has to start somewhere in learning this stuff, so don't feel too bad we are all learning...

Hope this helps.

5

strcmp returns 0 when the strings are the same. I have code that uses strcmp comparing character arrays to string literals, and I was quite confused when it wasn't working. Turns out it was wrong for me to assume it would return 1 when the string are the same!

Maybe you've made the same mistake?

1

I think this is a perfect starting point for you:

It's probably written at the right level for you. Good luck and welcome to stackoverflow!

When talking about string in C, it normally takes two forms: 1. a character array, 2. a character pointer. Most of the time, they are interchangeable. For example:

char *cmd_ptr = "command1"; char cmd_array[20] = "command2"; printf ("cmd1: %s cmd2: %s\n", cmd_ptr, cmd_array); 

The main difference for the above definition is that for cmd_ptr you could not change its content like cmd_ptr[0] = 'a'; for cmd_array you could change any element in the array.

But you could do cmd_ptr = cmd_array; then you could make changes through cmd_ptr as it points to the same location as cmd_array.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like