我有以下C ++代码:
#define VERSION 1
#define TYPE "this"
...
bool update(const char* json) {
...
const char* theType = doc["type"]; // "this"
int theVer = doc["version"]; // 2
//int ourVer = VERSION;
//char ourType[] = TYPE;
if ( (theVer > VERSION) && (theType == TYPE) ) {
return true
} else {
return false;
}
}
我可以同时打印theType
和theVer
,但是我无法成功地将它们与常量进行比较。我还试图将 casted 常量(注释掉)进行比较,无济于事。
如何比较#define定义的字符串和整数?
顺便说一句。这是用ArduinoIDE编码的。
答案 0 :(得分:3)
theType == TYPE
比较两个指针。当且仅当地址相同时,它才返回true,而在这里不是这种情况。
改为使用strcmp
:
if (theVer > VERSION && std::strcmp(theType, TYPE) == 0) {
// ...
}
strcmp
三通比较实际的字符串,当第一个字符串小于,等于时,返回一个数字< 0
,== 0
或> 0
。或大于秒。为此,您需要#include <cstring>
。
答案 1 :(得分:2)
我知道L.F的答案已经被接受,但是我希望他们使用print (full_name.title()\nfull_name.upper()\nfull_name.lower())
的建议有所异议。您甚至不应再使用strcmp
,而应该使用#define
。这样一来,您就可以清楚地键入内容,根据我的经验,constexpr
可以更好地发挥智能。
constexpr
应该使用TYPE
。不会强迫您使用旧的c库,并且可以使用==运算符将其与constexpr std::string_view
进行比较。
std::string
https://en.cppreference.com/w/cpp/language/constexpr https://en.cppreference.com/w/cpp/string/basic_string_view
答案 2 :(得分:1)
#define
不相关。
预处理后,您的代码段完全等于:
bool update(const char* json) {
const char* theType = doc["type"]; // "this"
int theVer = doc["version"]; // 2
if ( (theVer > 1) && (theType == "this") ) {
return true
} else {
return false;
}
}
因此,问题被简化为“如何比较两个C字符串?”,举了一个更简单的示例,如下所示:
int main()
{
const char* theType = "this";
const bool matches = (theType == "this");
}
答案 3 :(得分:0)
#define VERSION 1
#define TYPE "this"
...
bool update(const char* json) {
...
const char* theType = doc["type"]; // "this"
int theVer = doc["version"]; // 2
return (theVer > VERSION) && !strcmp(TYPE,theType) ;
}
答案 4 :(得分:0)
也许这段代码可以帮助您:
bool func()
{
const string str = "value";
int number = 3;
return str == const_string && number == const_number ? true : false;
}