【问题标题】:C equality of constant stringsC 常量字符串相等
【发布时间】:2014-11-23 06:42:47
【问题描述】:

以下比较是否保证正确?

"hello world"=="hello world";

此外,以下内容是否始终保证为 false?

char a[] = "hello world";
a == "hello world";

【问题讨论】:

  • 字符串,无论其物理位置如何,都必须使用字符串函数之一进行比较,例如 strcmp( "hello world", "hello world" ); IE。比较运算符“==”只会比较数组的地址,这些地址可能相同也可能不同。

标签: c


【解决方案1】:

要清楚 - 在这两种情况下,您都是在比较指针,而不是实际的字符串内容。

为

"hello world"=="hello world";

允许比较为true 或false。 C 标准在 6.4.5 “字符串文字”中说:

如果这些数组的元素具有适当的值,则不确定这些数组是否不同。

因此标准允许存储的文字相同或不同。

对于

char a[] = "hello world";
a == "hello world";

比较总是false,因为数组a的地址必须不同于字符串文字的地址。

【讨论】:

【解决方案2】:

在 C 中,您必须使用一个函数来为您比较字符串。直接执行只会告诉您两个字符串是否在内存中的同一位置。 所以

char a[] = "hello world";
char b[] = a;

制作

a == b;

因为 a 和 b 都指向内存中的同一个位置或字符串,所以会给出正确的结果。

如果要比较两个字符串,则必须使用strcmp(),如果字符串相等则返回 0。

if( strcmp(a, b) == 0 )
    printf("True\n");
else
    printf("False\n");

要使用它,您需要包含库 string.h。

#include <string.h>

【讨论】:

    【解决方案3】:

    == C 中的运算符可用于比较原始数据类型。由于 String 在 C 中不是原始的,因此您不能使用 == 来比较它们。最好的选择是通过包含string.h 库来使用strcmp() 函数。

    【讨论】:

      【解决方案4】:

      C 中不允许通过== 运算符比较字符串内容。 你应该使用

      strcmp(str1,str2);
      

      在这种情况下,您正在比较指针。 所以

      "hello world" == "hello world";
      

      可能是也可能不是 TRUE。

      但第二种情况总是 FALSE。

      char a[] = "hello world";
      a == "hello world";
      

      【讨论】:

      • 这不是问题。准确来说,使用==比较字符串是合法的,但结果是比较指针,而不是字符串内容。
      • 雨浩说的对。另外stcmp(str1,str2)也是错的!(错别字)
      • @YuHao 同意 == 可用于在这种情况下比较指针。但是像这里所做的那样比较指针是没有意义的。所以我猜这里的目的是比较字符串内容,所以我建议使用 strcmp()
      猜你喜欢
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多