2

これが私が持っているコードです。文字列の比較をしようとしています。シリアル入力は、押されたキーを読み取り、cmd.commandをキーボードで入力されたものに設定します。次に、それを取得して文字列比較を行い、リスト内にあるコマンドかどうかを確認します。私がこだわっているのは文字列の比較です。

typedef struct {
    const char *cmd;
    void (*cmdFuncPtr)(void);
}CmdStruct;

typedef struct {
    char command[16];
    char argument[16];
} Command;

Command cmd;

CmdStruct cmdStructArray[] = { {"led",      LEDHandler      },
                               {"relay",    RelayFunction    },  };

void ProcessCommand() {
    for (j = 0; j < sizeof(cmdStructArray)/sizeof(cmdStructArray[0]); j++) {
        if(strcmp(cmdStructArray[j].cmd, cmd.command) == 0) {
            // do stuff
        }
    }
}

「led」と入力すると、これら2つのprintfステートメントは同じものを出力します。

printf(cmdStructArray[0].cmd);
printf("%s", cmd.command);

文字列の比較を機能させるにはどうすればよいですか?

4

2 に答える 2

0

修正が見つかり、strcmp が機能するようになりました。構造体配列の構造体を変更しました。今は

typedef struct {
    char cmd[16];
    void (*cmdFuncPtr)(void);
}CmdStruct;

なぜこれが機能するのかわかりませんし、違いが何であるかもわかりません。私が以前持っていた const char *cmd も、C で「文字列」を作成する方法です。

于 2013-01-10T17:49:01.543 に答える
0

コマンドcmd.commandには、末尾の空白が隠されている可能性があります。比較を実行する前に空白を取り除きます。(コメントでDavid Schwartzに感謝します!)

于 2013-01-10T00:40:54.637 に答える