我试图比较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++;
}
}
下面附带串行监视器的图像
答案 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
进行比较。
==