私はCを初めて使用しますが、文字配列を介して文字列を使用する方法についてまだ少し混乱しています。
私のCプログラムでは、ユーザーからのコマンドを受け入れています。
char command[20];
scanf("%s",command);
もちろん、後で、彼らが入力したコマンドを把握したいと思います(「if(command == "hello")、then dosomething」に似たもの)。文字列リテラルを文字配列と比較しているので、これはCでは不可能であることはわかっていますが、それを行うにはどうすればよいでしょうか。 strcmp(command、 "hello")を使用しようとしましたが、それでもエラーが発生します。
あなたが提供できるアドバイスをいただければ幸いです。ありがとうございました!
文字列が同じ場合、strcmpは0を返します。文字配列を文字列リテラルと比較するstrcmpを使用するコードがあり、それが機能していないときにかなり混乱しました。文字列が同じであるときに1を返すと想定するのは間違っていました。
たぶん、あなたは同じ間違いをしたのですか?
私はあなたがやろうとしていると思うことの完全なバージョンを書きました:
#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
の使用についてコメントしましたが、新しいプログラマーがこのことを学ぶためにどこかから始めなければならないことを除いて、それらは正しいです。
お役に立てれば。
これはあなたにとって完璧な出発点だと思います。
http://www.wikihow.com/Compare-Two-Strings-in-C-Programming
おそらくあなたにとって適切なレベルで書かれています。がんばって、stackoverflowへようこそ!
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
を介して変更を加えることができます。