【问题标题】:Condition not meeting in c条件在 c 中不满足
【发布时间】:2017-04-09 06:57:20
【问题描述】:

由于某种原因,即使变量 watch 显示 var equal,此条件也不会作为 true 传递。

    if(arr[r1][1] != NULL) {
        t_plat = arr[r1][1];
        t_ver = arr[r1][2];


if((arr[r2][1] == t_plat) && (arr[r2][2] == t_ver))

【问题讨论】:

  • 您正在比较字符串的地址(不相等)要比较字符串的内容,请使用 string.h 中的 strcmp()
  • 当然它们不相等。你比较指针,可以清楚的看到0xb01a70 != 0xb01770
  • @JerryJeremiah,对如何完成 strcmp() 功能有任何帮助吗?我应该得到 2 个额外的 char 变量来移动指针值吗

标签: c arrays if-statement conditional-statements


【解决方案1】:

您不能像在任何其他语言中那样比较 C 中的字符串,因为在 C 中,字符串是一个指针

所以你不是在比较值,而是在比较不同的字符串的地址。

要检查两个字符串是否相等,请使用<string.h> 中的strcasecmpstrcmp 函数。

例子:

if (strcmp(arr[r2][1], t_pat) == 0) {
    // arr[r2][1] and t_pat are equal by value
}

【讨论】:

    【解决方案2】:

    正如您从屏幕截图中看到的那样,对象arr[r2][1] 存储值0xb01a70,而对象t_plat 存储值0xb01770

    因此,如果您比较存储在这些对象中的值,例如

    if((arr[r2][1] == t_plat) )
    

    毫无疑问,您将获得false。这些值彼此不相等。

    这些值是什么?它们是指向字符串第一个字符的指针。如果要比较指针指向的字符串本身,则必须使用标头 <string.h> 中声明的标准 C 函数 strcmp

    你应该这样写

    if( strcmp( arr[r2][1], t_plat ) == 0 && strcmp( arr[r2][2], t_ver ) == 0 )
    

    【讨论】:

    • @d3l 我说过它们是指针吗?我不明白你的评论以及为什么你对我的正确答案投了反对票。
    • @VladfromMoscow 如果我想让这些等于 NULL 怎么办?例如:arr[r1][0] = NULL; arr[r1][1] = NULL; arr[r1][2] = NULL;这些是否会使其等于 NULL ,如果不是,那么正确的做法是什么?
    • @Fenomatik 为什么不呢?您可以将指针设置为 NULL。但是,您应该谨慎行事。如果指针指向动态分配的内存,则应首先释放它,然后再将指针分配为 NULL。否则可能会发生内存泄漏。
    • @Fenomatik 是的,您可以将指针与 NULL 进行比较。如果一个指针被赋值为 NULL,那么它将等于 NULL。
    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多