Arduino字符串比较不起作用

时间:2017-05-24 06:08:20

标签: 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++;        
    }
  }

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

Serial Monitor

2 个答案:

答案 0 :(得分:5)

再次阅读man page

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

int strcmp(const char *s1, const char *s2);
     

strcmp函数返回一个大于,等于或小于的整数,   相应地s1指向的字符串大于,等于,或小于 s2所指向的字符串< /强>

当两个字符串匹配时,

strcmp()会返回0。所以,

 if (strcmp(((WiFi.SSID(i)).c_str()),((ReadWifiSSID(j)).c_str()))==1)

最好是

 if (strcmp (((WiFi.SSID(i)).c_str()),((ReadWifiSSID(j)).c_str())) == 0)

答案 1 :(得分:2)

如前所述,您使用class Bid < ActiveRecord::Base belongs_to :bidder, class_name: "User", foreign_key: "bidder_id" belongs_to :auction end class User < ActiveRecord::Base has_many :bids has_many :auctions, :foreign_key => 'bidder_id' has_secure_password end class Auction < ActiveRecord::Base belongs_to :seller, class_name: "User", foreign_key: :user_id has_many :bids has_many :bidders, through: :bids end 错误。

但你不需要使用它。
您可以直接将strcmp个对象与String进行比较。

==