2012-04-15 71 views
0

我真的不知道爲什麼,但似乎並不奏效。似乎對我完全有效:檢查字符是否

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

即使當我輸入hello時,什麼也沒有發生,只是調用else {}中的代碼。問題是什麼?

+0

正如您使用'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

+0

NULL更好interesting.i'll記住這一點。 – Rrjrjtlokrthjji 2012-04-16 18:45:31

回答

4

在C中,字符串文字是在許多情況下變成指針的數組。當你使用==時,你比較的是地址的字符串(或者說,每個字符串的第一個字符的地址),而不是像你期望的字符串的內容。例如:

if (text == "hello") 

是有點像做:

if (0x800050a0 == 0x80001000) 

這是不可能的text指向被存儲字符"hello"相同的位置。

要比較C中的字符串,應該使用strcmp,它根據字符串如何相互比較返回一個整數。如果字符串相等,該函數返回0;如果第一個字符串是字典順序比第二字符串更小,則該函數返回-1,否則該函數返回1

+0

尼斯回答,謝謝大夥。 – Rrjrjtlokrthjji 2012-04-15 20:00:48

4

您需要使用strcmp來比較字符串:

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

你在做什麼是比較兩個指針。 Read more

+0

你是正確的,我的錯誤:) – Rrjrjtlokrthjji 2012-04-15 19:57:27

1

C字符串不是對象,不能與==進行比較;使用strcmp()

2

你的程序比較字符串text"hello"的指針。它不會逐字符比較字符串。

(其他回答者演示手段來完成由字符比較字符)

2

您的代碼進行比較指針和他們顯然不相等。您想比較字符串,因此您可能需要執行類似操作:

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

您並未比較內容,但地址。

要比較數據,您應該使用strcmp-ish函數。

0

在比較

text == "hello" 

您將存儲文本的內存地址與存儲常量字符串「hello」的地址進行比較。這是因爲C字符串實際上是指向字符數組的指針。然後將它解釋爲一個字符序列,直到達到空終止符。

包括圖書館

include <string.h>; 

,並做比較,因爲

!strcmp(text, "hello"); 

strcmp()函數有兩個字符串,返回0,如果他們是平等的,非零,如果他們不。如果不爲零,則負/正值確定哪一個是字典序的情況下(第一/第二)和絕對值確定它們的不同的第一個字符。

+0

是的,我現在明白了。謝謝你的回答 – Rrjrjtlokrthjji 2012-04-15 19:59:51

0

GLib(#include <glib.h>,你應該擁有它,因爲你有GTK)有一個g_ascii_strcmp()函數用於此目的。如果你的文本不是ascii(這很可能是因爲它是用戶輸入,幾乎可以容納任何東西),你應該用g_utf8_collate()來代替。