【问题标题】:linux c/c++ - weird if/else issuelinux c/c++ - 奇怪的 if/else 问题
【发布时间】:2011-07-21 11:49:06
【问题描述】:

我正在查询一个 mysql 表,然后循环遍历结果。

其中一个字段的值为“0”,因此当我尝试以下操作时,它不起作用!

while ((row2 = mysql_fetch_row(resultset2)) != NULL) {
    if (row2[2] != "0") {
        // the field has a value of 0, but it's still executing the code here!
    } else {
        // should be executing this code
    }
}

我知道 C/C++ 在涉及变量时非常严格(取消链接 php),但我无法弄清楚这一点。有人知道为什么吗?

【问题讨论】:

  • 看起来你应该使用字符串比较而不是指针比较
  • 我假设 row2 持有某种类型的字符串。您可以在条件之前打印 row2[2] 的值吗?
  • C/C++ 不是一种语言。是 C 还是 C++?

标签: c++ mysql c linux


【解决方案1】:

您将row2[2](指向char 的指针)与指向常量char 数组"0" 的指针进行比较。

使用strcmp(row2[2], "0") != 0(C 解决方案)、std::string(row2[2]) != "0"(C++ 解决方案)或atoi(row2[2]) != 0,如果您知道row2[2] 始终是整数的字符串表示形式(并且不能是SQL NULL 值)。

【讨论】:

  • 完美,这对我很有帮助!
【解决方案2】:

你不能像这样比较字符串文字:

if (row2[2] != "0") //wrong

你要么这样做:

if (strcmp(row2[2], "0")) //correct 

或者这个:

if (std::string(row2[2]) != "0") //correct

对于这种特殊情况,当只有一个字符时,您也可以这样做:

if (row2[2][0] != '0') //correct  - not the single quote around 0!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2011-05-16
    相关资源
    最近更新 更多