C语言 - IF(char[] == "ZYX") 不起作用。

3

我从arduino向另一个arduino发送字符串(通过I2C),并将其捕获并保存到char[10]中。当我将此变量与文本进行比较时,条件没有执行:-/而我不知道为什么...

char dataRx[10] = "";

void DaemonReceiving(int howMany){
  int index = 0;

  while(Wire.available() > 0){
    char c = Wire.read();

    dataRx[index++] = c;
    dataRx[index] = '\0';
  }
  Serial.println(dataRx);

  if(dataRx == "HELLO"){
        Wire.beginTransmission(1);
        Wire.write("HI");
        Wire.endTransmission();
  }
}

1
了解strcmp()函数。 - Roddy
1
请记住,运行时 "HELLO" 将成为一个字符指针(char const *)。 dataRx 是指向其他位置的指针,因此相等性表达式永远不会为真,因为它所问的问题是“这两个指针指向同一位置吗?”。 - cdhowie
3个回答

7

要将dataRX字符串与“HELLO”进行比较,请使用以下代码:

if (strcmp (dataRx,"HELLO") == 0) {

    // matches HELLO

}

1
Serial.println(dataRx) 的输出是什么? - John Jesus
你好 当我写下以下代码时: case 0: Serial.println("0"); if(strcmp(dataRx,"HELLO") == 0){uC不会输出"0",也不会执行条件语句。但是,当我将strcmp(dataRx,"HELLO") == 0改为strcmp(dataRx,"HELLO") == 1时,uC会在控制台上输出0... - Kuba Żukowski

4
如果是C语言,你需要使用strcmp函数,否则你只是比较两个指针——“HELLO”的位置和dataRx的位置(这将失败)。
请注意,这与Arduino无关 :)

当我写这个时,我的函数DaemonReceiving不起作用...我认为Arduino冻结了。 - Kuba Żukowski
请注意,这与Arduino无关:) -> 我可以在Arduino上完成它;) - Kuba Żukowski
添加一些调试代码,将其打印到控制台窗口(或显示器)上,看看它在哪里失败了。 - KevinDTimm
我在setup()中添加了Serial.println("1/2/3/4/5...")(我可以看到这个),在条件语句之前和之后也添加了,但是什么都没有显示(我看不到)。 - Kuba Żukowski
好的,我知道,但这是异常情况:) 你的条件很好并且执行成功,但是uC在下面的代码中卡住了:Wire.beginTransmission(1); Wire.write("HI"); Wire.endTransmission(); - Kuba Żukowski

4

这是指针值比较:

if(dataRx == "HELLO")

如果需要比较字符串,你需要使用strcmp函数:

if(strcmp(dataRx, "HELLO") == 0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接