我有个问题。相信我,我从凌晨1点或2点开始使用此strtok()函数。现在是凌晨4:22。 >。<

问题是这样的:
1.当我输入“蓝色”时,这三个标记就可以了。
2.当我输入“红色”或“绿色”时,这三个标记为NULL :(。

const char s[2] = "~"; //for cutting;
char inData[100]; // Allocate some space for the string


char *token;
char *token2;
char *token3;
char x1[100];
char x2[100];
char x3[100];

char Comp(char* This) {
    while (Serial.available() > 0) // Don't read unless
                                   // there you know there is data
    {
        if(index < 99) // One less than the size of the array
        {
            inChar = Serial.read(); // Read a character
            inData[index] = inChar; // Store it
            index++; // Increment where to write next
        //  inData[index] = '\0'; // Null terminate the string
        }
    }

    token = strtok(inData, s);
    strcpy(x1,token);

    token2 = strtok(NULL, s);
    strcpy(x2,token2);

    token3 = strtok(NULL, s);
    strcpy(x3,token3);

    if (strcmp(x1,This)  == 0) {

        Serial.println(x1);
        Serial.println(x2);
        Serial.println(x3);

        for (int i=0;i<99;i++) {
            inData[i]=0;
        }
        index=0;
        return(0);
    }
    else {
        return(1);
    }
}


我如何称呼Comp的功能:

if(Comp("blue")==0){
    Serial.println("BLUE SELECTED");
    analogWrite(9, 0);
    analogWrite(10,255);
    analogWrite(11,255);

}

if(Comp("green")==0){
    Serial.println("GREEN SELECTED");
    analogWrite(10,0);
    analogWrite(11,255);
    analogWrite(9,255);

}

if(Comp("red")==0){
    Serial.println("RED SELECTED");
    analogWrite(10,255);
    analogWrite(11,0);
    analogWrite(9,255);

}


输出:
当我输入:“ blue〜lalalalal〜kakakakaekkewew”
它输出:
蓝色
拉拉拉尔
kawawawawewew
蓝色选择

当我输入:“ red〜123〜321
它输出:
红色

红色选择

当我输入:“ green〜123〜321”
它输出
绿色

绿色选中

最佳答案

这就是我解决错误的方法。
改变了我接收数据的方式。

char Comp(char* This) {

while(Serial.available()) {
  inChar = Serial.read();
  inData.concat(inChar);
 }

  strcpy(inData2, inData.c_str());
   token = strtok(inData2, s);
        strcpy(x1,token);

            token = strtok(NULL, s);
          strcpy(x2,token);

              token = strtok(NULL, s);
              strcpy(x3,token);

if (strcmp(x1,This)  == 0) {

Serial.println(x1);
Serial.println(x2);
Serial.println(x3);

   inData = "";
   inChar = '\0';
    return(0);
}
else {
return(1);
}

}

09-06 15:48