C语言 使用 if 检查字符



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

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

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

您需要

使用 strcmp 比较字符串:

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

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

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

if (text == "hello")

有点像做:

if (0x800050a0 == 0x80001000)

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

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

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

(其他回答者演示了逐个字符比较完成的方法)

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

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

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

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

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

在比较中

text == "hello"

您正在比较存储文本的内存地址与存储常量字符串文本"Hello"的地址。这是因为 C 字符串实际上是指向字符数组的指针。然后,它被解释为字符序列,直到到达 null 终止符。

包括库

include <string.h>;

并进行比较为

!strcmp(text, "hello");

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

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

相关内容

  • 没有找到相关文章

最新更新