在C中比较两个字符串是否相同的最佳方法是什么?
我说有两个字符串(在这种情况下是字符串文字)
char *name = "Fotis"; char *second_name = "Fotis";
我有两种方法可以比较它们,它们都给我一个准确的结果。 第一个是等于运算符( ==
),同样:
if (name == second_name) printf ("Great success!\n");
第二个是通过string.h
提供的strcmp
函数:
if (strcmp (name, second_name) == 0) printf ("Great success!\n");
我的问题是:两者中哪一个最有效率 idiomatic}比较C中两个字符串的方法? 还有另一种更惯用的方式吗?
使用strcmp
的第二种方法是正确的,使用==
的第一种方法是不正确的,因为它只是比较指针的值,而不是字符串的内容。
您比较的两个字符串恰好是字符串文字,它们可能,并且标准可能没有相同的指针值。
自然的方式是使用strcmp
因为它更准确。
你使用==
第一个方法是比较指针,所以只有两个完全相同的char数组才会返回true,这意味着它们指向同一块内存。 使用strcmp
的另一种方法是你这样做的方式,因为它正在比较字符串的实际内容。 因此,即使两个字符串位于内存中的不同位置,它也可以返回true。
你的第一个方法看起来正常工作的原因是因为这两个变量指向相同的字符串文字,所以当它们是相同的字符串时它们基本上指向内存中的相同位置,当它们是不同的字符串时它们指向不同的位置。 如果您使用malloc
为这些字符串分配内存并设置其内容,那么它们将指向内存中的不同位置,因此您的第一个方法将返回false
,而第二个方法将返回相同的文本字符串的true
。
if (name == second_name) printf ("Great success!\n");
注意:你将指针与这个指针进行比较,而不是字符串的文本。