Arduino字符串比较不起作用

1 c c++ arduino strcmp

我试图比较EEPROM存储的返回字符串的SSID与WiFi.SSID()函数.

虽然在串行监视器中它实际上是相同的,但我没有得到匹配,它永远不会达到if声明.

我尝试使用==不带.str()和使用的运算符if( strcmp ( a.c_str(),b.c_str)==1)

似乎没什么用.我在这里错过了什么?

void ConnectToBestWifi()
{
  int apnos = WiFi.scanNetworks();
  int loc[3];
  int no=0;
  for(int i=0;i<apnos;i++)
  {
    for(int j=0;j<3;j++)
    {
      Serial.println("");
      Serial.println("Wifi SSID");
      Serial.println(WiFi.SSID(i).c_str());
      Serial.println("");
      Serial.println("Read SSID");
      Serial.println(ReadWifiSSID(j).c_str());
      Serial.println("");

    if (strcmp(((WiFi.SSID(i)).c_str()),((ReadWifiSSID(j)).c_str()))==1)
    {
      Serial.println("gotcha");
      loc [no]=i;
      no++;        
    }
  }
Run Code Online (Sandbox Code Playgroud)

下面附带串行监视器的图像

串行监视器

Sou*_*osh 5

阅读手册页,再一次.

另外,引用C11,章节§7.24.4.2,(强调我的)

int strcmp(const char *s1, const char *s2);
Run Code Online (Sandbox Code Playgroud)

strcmp函数返回一个整数大于,等于,或小于,相应地作为指向的字符串s1大于,等于,或小于该字符串通过指向s2.

strcmp()0当两个字符串匹配时返回a .所以,

 if (strcmp(((WiFi.SSID(i)).c_str()),((ReadWifiSSID(j)).c_str()))==1)
Run Code Online (Sandbox Code Playgroud)

应该更好

 if (strcmp (((WiFi.SSID(i)).c_str()),((ReadWifiSSID(j)).c_str())) == 0)
Run Code Online (Sandbox Code Playgroud)

  • 我也会删除无用的额外括号:`if(strcmp(WiFi.SSID(i).c_str(),ReadWifiSSID(j).c_str())== 0)` (2认同)