在C中比较两个字符串是否相同的最佳方法是什么?

时间:2014-02-06 17:48:43

标签: c string string-comparison

我有两个字符串(在这种情况下是字符串文字),比如说

char *name        = "Fotis";
char *second_name = "Fotis";

我有两种方法可以比较它们,这两种方法都能给我一个准确的结果。第一个是等于运算符(==),同样:

if (name == second_name)
    printf ("Great success!\n");

,第二个是通过strcmp中提供的string.h函数:

if (strcmp (name, second_name) == 0)
    printf ("Great success!\n");

我的问题是:两者中哪一个最有效率idiomatic}比较C中两个字符串的方法?是否有另一种更惯用的方式?

4 个答案:

答案 0 :(得分:7)

使用strcmp的第二种方式是正确的,使用==的第一种方式是不正确,因为它只是比较指针的值,而不是字符串的内容。< / p>

您比较的两个字符串恰好是字符串文字,它们可能,并且标准可能没有相同的指针值。

答案 1 :(得分:1)

自然的方法是使用strcmp,因为它更准确。

答案 2 :(得分:1)

使用==的第一种方法是比较指针,因此只有两者完全相同的char数组才会返回true,这意味着它们指向同一块内存。使用strcmp的另一种方法就是这样做,因为它正在比较字符串的实际内容。因此,即使两个字符串位于内存中的不同位置,它也可以返回true。

你的第一个方法看起来正常工作的原因是因为这两个变量指向相同的字符串文字,所以当它们是相同的字符串时它们基本上指向内存中的相同位置,而当它们是相同的字符串时它们指向不同的位置不同的字符串。如果您使用malloc为这些字符串分配内存并设置其内容,那么它们将指向内存中的不同位置,因此您的第一个方法将返回false,第二个方法将返回true对于相同的文本字符串。

答案 3 :(得分:0)

if (name == second_name)
    printf ("Great success!\n");

注意:你正在将指针与这一点进行比较,而不是字符串的文本。