web-dev-qa-db-ja.com

C-文字列リテラルと文字配列の比較

私はCを初めて使用しますが、文字配列を介して文字列を使用する方法についてまだ少し混乱しています。

私のCプログラムでは、ユーザーからのコマンドを受け入れています。

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

もちろん、後で、彼らが入力したコマンドを把握したいと思います(「if(command == "hello")、then dosomething」に似たもの)。文字列リテラルを文字配列と比較しているので、これはCでは不可能であることはわかっていますが、それを行うにはどうすればよいでしょうか。 strcmp(command、 "hello")を使用しようとしましたが、それでもエラーが発生します。

あなたが提供できるアドバイスをいただければ幸いです。ありがとうございました!

6
Irina

文字列が同じ場合、strcmpは0を返します。文字配列を文字列リテラルと比較するstrcmpを使用するコードがあり、それが機能していないときにかなり混乱しました。文字列が同じであるときに1を返すと想定するのは間違っていました。

たぶん、あなたは同じ間違いをしたのですか?

6
gravitas

私はあなたがやろうとしていると思うことの完全なバージョンを書きました:

    #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!");
       }

    }

何人かの人々がscanfの使用についてコメントしましたが、新しいプログラマーがこのことを学ぶためにどこかから始めなければならないことを除いて、それらは正しいです。

お役に立てれば。

7
JackCColeman

これはあなたにとって完璧な出発点だと思います。

http://www.wikihow.com/Compare-Two-Strings-in-C-Programming

おそらくあなたにとって適切なレベルで書かれています。がんばって、stackoverflowへようこそ!

2
spartygw

Cで文字列について話すとき、それは通常2つの形式を取ります:1.文字配列、2。文字ポインター。ほとんどの場合、それらは交換可能です。例えば:

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

上記の定義の主な違いは、cmd_ptrの場合はcmd_ptr[0] = 'a';のようにcmd_arrayのようにコンテンツを変更できず、配列内の要素を変更できることです。

ただし、cmd_ptr = cmd_array;を使用すると、cmd_ptrと同じ場所を指すため、cmd_arrayを介して変更を加えることができます。

0
qunying