我真的不知道爲什麼,但似乎並不奏效。似乎對我完全有效:檢查字符是否
gchar *text = gtk_entry_get_text(entry);
if(text == "hello") {
//do sth
}
else {
//do sth else
}
即使當我輸入hello時,什麼也沒有發生,只是調用else {}中的代碼。問題是什麼?
我真的不知道爲什麼,但似乎並不奏效。似乎對我完全有效:檢查字符是否
gchar *text = gtk_entry_get_text(entry);
if(text == "hello") {
//do sth
}
else {
//do sth else
}
即使當我輸入hello時,什麼也沒有發生,只是調用else {}中的代碼。問題是什麼?
在C中,字符串文字是在許多情況下變成指針的數組。當你使用==
時,你比較的是地址的字符串(或者說,每個字符串的第一個字符的地址),而不是像你期望的字符串的內容。例如:
if (text == "hello")
是有點像做:
if (0x800050a0 == 0x80001000)
這是不可能的text
指向被存儲字符"hello"
相同的位置。
要比較C中的字符串,應該使用strcmp
,它根據字符串如何相互比較返回一個整數。如果字符串相等,該函數返回0;如果第一個字符串是字典順序比第二字符串更小,則該函數返回-1,否則該函數返回1
尼斯回答,謝謝大夥。 – Rrjrjtlokrthjji 2012-04-15 20:00:48
您需要使用strcmp
來比較字符串:
if(strcmp(text, "hello") == 0) {
//do sth
}
else {
//do sth else
}
你在做什麼是比較兩個指針。 Read more。
你是正確的,我的錯誤:) – Rrjrjtlokrthjji 2012-04-15 19:57:27
C字符串不是對象,不能與==
進行比較;使用strcmp()
。
你的程序比較字符串text
和"hello"
的指針。它不會逐字符比較字符串。
(其他回答者演示手段來完成由字符比較字符)
您的代碼進行比較指針和他們顯然不相等。您想比較字符串,因此您可能需要執行類似操作:
if (strcmp(text, "hello") == 0) {
// Do something
} else {
// Do something else
}
您並未比較內容,但地址。
要比較數據,您應該使用strcmp-ish函數。
在比較
text == "hello"
您將存儲文本的內存地址與存儲常量字符串「hello」的地址進行比較。這是因爲C字符串實際上是指向字符數組的指針。然後將它解釋爲一個字符序列,直到達到空終止符。
包括圖書館
include <string.h>;
,並做比較,因爲
!strcmp(text, "hello");
的strcmp()
函數有兩個字符串,返回0,如果他們是平等的,非零,如果他們不。如果不爲零,則負/正值確定哪一個是字典序的情況下(第一/第二)和絕對值確定它們的不同的第一個字符。
是的,我現在明白了。謝謝你的回答 – Rrjrjtlokrthjji 2012-04-15 19:59:51
GLib(#include <glib.h>
,你應該擁有它,因爲你有GTK)有一個g_ascii_strcmp()函數用於此目的。如果你的文本不是ascii(這很可能是因爲它是用戶輸入,幾乎可以容納任何東西),你應該用g_utf8_collate()來代替。
正如您使用'Gtk'因此'Glib',可以利用['g_Strcmp0'](http://developer.gnome.org/glib/2.28/glib-String-Utility-Functions.html #G-strcmp0),其中處理比STRCMP – 2012-04-16 16:52:03
NULL更好interesting.i'll記住這一點。 – Rrjrjtlokrthjji 2012-04-16 18:45:31