0

分解された文字列を Arduino の別の文字列と比較しようとしていますが、うまくいきません。分割された文字列は、シリアル ポートから読み取られます。

まず、文字列を分解するために使用する関数は次のとおりです。

int count_delimiters(char str[], const char* delimiters) {
    int i, j, result = 0;
    for (i = 0; i < strlen(str); ++i) {
        for (j = 0; j < strlen(delimiters); ++j) {
            if (str[i] == delimiters[j]) {
                ++result;
            }
        }
    }
    return (result + 1);
}

char** split(char str[], const char* delimiters) {
    int result_size = count_delimiters(str, delimiters);
    int i = 0;
    char* result[result_size];
    char* pch = strtok(str, ",");

    while (pch != NULL)
    {
      result[i] = pch;
      pch = strtok(NULL, ",");
      ++i;
    }

    return result;
}

分解された文字列を別の文字列と比較しようとする部分は次のようになります。

char input_array[input.length()];
input.toCharArray(input_array, (input.length() + 1));
exploded = split(input_array, ",");

if ("$test" == exploded[0]) {
    Serial.println("match"); // This code is never reached.
}

シリアル モニタに$test,otherと入力すると、一致が出力されることを期待していますが、何も出力されません。私が行うと、 $testSerial.println(exploded[0]);が出力されます。私は何を間違っていますか?

\r、 、\nなどの印刷できない文字を探してみました\0が、「$test\r」などを確認しても true が返されないため、これらの文字が含まれていないようです。

4

1 に答える 1

2

この行で:

if ("$test" == exploded[0])

== による比較の代わりに strcmp を使用します。

于 2012-11-14T22:51:15.423 に答える