我将const char *
与字符串进行比较,并且由于某种原因它总是成功。
if (std::strcmp(t->detectColor->name, "ghghjg") != 0) {
printf("XXXXXXXXXXX\n");
// check if it was allready a sequencer
if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") != 0) {
printf("what is going on?\n");
detectColor名称总是类似于绿色或蓝色,例如t->className
是“ofxDTangibleBase”。还是打印
XXXXXXXXXXX
what is going on?
在控制台中。 我怎样才能获得有效的比较?
答案 0 :(得分:8)
返回一个表示其间关系的整数值 strings:零值表示两个字符串相等。一个值 大于零表示第一个字符没有 match在str1中的值大于在str2中的值;并且值小于 零表示相反。
或者以cppreference.com:
表示不同返回值
- 如果lhs小于rhs,则为负值。
- 0如果lhs等于rhs。
- 如果lhs大于rhs,则为正值。
因此,在您的代码中,strcmp(t->detectColor->name, "ghghjg")
将返回不同于0的内容。因此,将打印“XXXXXXXXXXX”。
您只需要更改:
if (std::strcmp(t->detectColor->name, "ghghjg") != 0)
到
if (std::strcmp(t->detectColor->name, "ghghjg") == 0)
其他比较也一样。
答案 1 :(得分:1)
std::strcmp
在字符串相同时返回0,在字符串不同时返回小于0或大于0的值。所以你可能会改变你的代码:
if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") != 0) {
printf("indeed, strings are different\n");
如果lhs小于rhs,则为负值。 如果lhs等于rhs,则为0。 如果lhs大于rhs,则为正值。
http://en.cppreference.com/w/cpp/string/byte/strcmp
如何才能获得有效的比较?
if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") == 0) {
printf("strings are equal lexicographically\n");