【问题标题】:Ternary operator is always false三元运算符始终为假
【发布时间】:2013-05-17 06:38:59
【问题描述】:

我正在使用 C 代码编写一个项目,并尝试使用三元 if 语句,但它总是返回 false,我不明白为什么。

三元if语句是:

(reportParameterArray[P_TARGET] == '\0') ? reportParameterArray[P_TARGET] : "HELLO"

我想要做的是如果reportParameterArray[P_TARGET] 不等于\0,那么它应该输出实际值,否则它会打印你好。但目前它总是打印HELLO

当我调试时,我可以看到该值为 \0,因此它应该打印“HELLO”,但是当有实际值时,它仍然打印 HELLO,而不是 reportParameterArray[P_TARGET] 的实际值。

reportParameterArray[P_TARGET] 是 char** 类型

感谢您提供的任何帮助。

【问题讨论】:

  • 你试过检查(reportParameterArray[P_TARGET] == NULL)吗?
  • reportParameterArray[P_TARGET] 似乎是 char"HELLO" 是一个字符串。如果您的意思是空指针,请使用 NULL 而不是 '\0'
  • reportParameterArray[P_TARGET] 的类型为 char**。我尝试使用 NULL 而不是 \0 但得到相同的结果
  • 它工作正常,检查指针分配 -> char **reportParameterArray = ?
  • 与 (reportParameterArray[P_TARGET] == '\0') 您正在将 char 指针与 char 进行比较。

标签: c ternary-operator


【解决方案1】:

您的三元运算符表达式是向后的。你的意思是:

(reportParameterArray[P_TARGET] != '\0') ? reportParameterArray[P_TARGET] : "HELLO"

或者:

(reportParameterArray[P_TARGET] == '\0') ? "HELLO" : reportParameterArray[P_TARGET]

【讨论】:

  • 两种方法我都试过了,我再次将其更改为!=,这一次它总是打印数组中的内容,而不是HELLO
【解决方案2】:

三元运算的形式

condition ? when true : when false;

例如

(var == 2) ? "Var equals 2!" : "Var doesn't equal 2!";

因此你的条件倒退了。

【讨论】:

  • 我已经尝试了两种方法,并改变了我必须成为的!= 而这一次它总是打印数组中的内容。 IE。如果数组中的值为空,则输出一个空白字符串而不是 HELLO
【解决方案3】:

正如其他答案所说,您的条件是倒退的。但是您还要将char*char 进行比较。您想检查字符串中的第一个字符,如下所示:

(reportParameterArray[P_TARGET][0] != '\0') ? reportParameterArray[P_TARGET] : "HELLO"

这当然是假设您要检查一个空字符串,而不是一个不存在的字符串。

【讨论】:

    【解决方案4】:

    你应该检查

    (reportParameterArray[P_TARGET] == NULL)
    

    因为

    (reportParameterArray[P_TARGET] == '\0') 
    

    您正在将 char 指针与 char 进行比较。

    (*reportParameterArray[P_TARGET] == '\0')
    

    实际上没问题 - '\0' 是一个零整数值,在这种情况下被评估为一个空指针常量,但如果你的意思是 NULL,就说 NULL

    【讨论】:

    • 不应该扩展空字符文字吗?
    • '\0' 只是一个零整数值,NULL 是 ((void*)0)。具有相同的值,但类型不同
    猜你喜欢
    • 2020-11-02
    • 2014-08-03
    • 1970-01-01
    • 2018-09-18
    • 2017-09-18
    • 2018-04-22
    • 1970-01-01
    • 2023-01-02
    • 2011-04-06
    相关资源
    最近更新 更多