用if检查char

时间:2012-04-15 19:52:07

标签: c gtk gtkentry

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

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

即使我输入hello也没有任何反应,但调用else {}中的代码。有什么问题?

8 个答案:

答案 0 :(得分:5)

您需要使用strcmp比较字符串:

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

你正在做的是比较两个指针。 Read more

答案 1 :(得分:4)

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

if (text == "hello")

有点像:

if (0x800050a0 == 0x80001000)

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

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

答案 2 :(得分:2)

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

(其他回答者展示了通过角色比较来完成角色的方法)

答案 3 :(得分:2)

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

if (strcmp(text, "hello") == 0) {
    // Do something
} else {
    // Do something else
}

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

在比较中

text == "hello"

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

包括图书馆

include <string.h>;

并进行比较

!strcmp(text, "hello");

strcmp()函数接受两个字符串,如果它们相等则返回0,如果不相等则返回非零值。如果它非零,则负值/正值确定哪一个按字典顺序缩小(第一个/第二个),绝对值确定它们不同的第一个字符。

答案 7 :(得分:0)

GLib(#include <glib.h>,你应该拥有它,因为你有GTK)有一个g_ascii_strcmp()功能用于此目的。如果你的文字是非ascii(这很可能因为它是一个用户输入,几乎可以容纳任何东西),你应该与g_utf8_collate()进行比较。