如何用相等运算符比较两个字符串。我也在GNOME glib
库中看到了。他们将两个字符串与==
运算符进行比较。这是代码:
/* Code from Singly Linked List - gslist.c*/
GSList*
g_slist_find (GSList *list,
gconstpointer data) // Here gconstpointer is `const void*`
{
while (list)
{
if (list->data == data) // What is compare here?
break;
list = list->next;
}
return list;
}
那么,glib代码是否有效?
答案 0 :(得分:3)
在==
上使用char*
运算符只会检查它们是否指向相同的内存地址。当然,与==
的真实比较的每个字符串对也将与strcmp
进行比较。然而,相反的情况根本就不是这样。两个字符串很可能在词法上是等价的,但它们位于不同的地址
例如
char* p1 = "hello world";
// p2 will point to the same address as p1. This is how pointer
// assignment work
char* p2 = p1;
printf ("%s\n", p1 == p2 ? "true" : "false") // true
printf ("%s\n", strcmp(p1, p2) == 0 ? "true" : "false") // true
// the addressed return by malloc here will not be the address
// of p1.
char* p3 = malloc(strlen(p1) + 1);
strcpy(p3, p2);
printf ("%s\n", p1 == p3 ? "true" : "false") // false
printf ("%s\n", strcmp(p1, p3) == 0 ? "true" : "false") // true