0

我真的不知道为什么,但这似乎不起作用。对我来说似乎完全有效:

gchar *text = gtk_entry_get_text(entry);
if(text == "hello") { 
    //do sth
}
else {
    //do sth else
}

即使我输入 hello 什么也没发生,但调用 else { } 中的代码。问题是什么?

4

8 回答 8

5

您需要使用以下方法比较字符串strcmp

if(strcmp(text, "hello") == 0) { 
    //do sth
}
else {
    //do sth else
}

你正在做的是比较两个指针。 阅读更多

于 2012-04-15T19:53:18.557 回答
4

在 C 中,字符串文字是在许多情况下成为指针的数组。您在使用时比较的是字符串==地址(或者更确切地说,每个字符串的第一个字符的地址),而不是您期望的字符串的内容。例如:

if (text == "hello")

有点像这样做:

if (0x800050a0 == 0x80001000)

不太可能text指向存储字符的相同位置"hello"

要在 C 中比较字符串,您应该使用strcmp,它根据字符串相互比较的方式返回一个整数。如果字符串相等,则该函数返回 0。如果第一个字符串按字典顺序小于第二个字符串,则该函数返回 -1,否则该函数返回 1。

于 2012-04-15T19:58:24.193 回答
2

您的程序比较字符串的指针text"hello". 它不会逐个字符地比较字符串。

(其他回答者展示了逐字比较的方法)

于 2012-04-15T19:54:24.290 回答
2

您的代码比较指针,它们显然不相等。您想比较字符串,因此您可能需要执行以下操作:

if (strcmp(text, "hello") == 0) {
    // Do something
} else {
    // Do something else
}
于 2012-04-15T19:55:10.187 回答
1

C 字符串不是对象,不能与==;进行比较 使用strcmp().

于 2012-04-15T19:53:27.650 回答
1

您不是在比较内容,而是在比较地址。

要比较数据,您应该使用 strcmp-ish 函数。

于 2012-04-15T19:56:25.397 回答
0

在比较中

text == "hello"

您正在将存储文本的内存地址与存储常量字符串文字“hello”的地址进行比较。这是因为 C 字符串实际上是指向字符数组的指针。然后它被解释为一个字符序列,直到到达空终止符。

包括图书馆

include <string.h>;

并进行比较

!strcmp(text, "hello");

strcmp()函数接受两个字符串,如果它们相等则返回 0,否则返回非零。如果它不为零,则负/正值确定哪个在字典上更小(第一/第二),并且绝对值确定它们不同的第一个字符。

于 2012-04-15T19:58:45.017 回答
0

GLib ( #include <glib.h>,你应该有它,因为你有 GTK) 有一个g_ascii_strcmp()函数用于此目的。如果您的文本不是 ascii(很可能是因为它是用户输入,几乎可以保存任何内容),您应该与g_utf8_collat​​e()进行比较。

于 2012-04-17T22:23:12.277 回答