2016-12-03 64 views
1

我正在嘗試構建BST。我的結構;節點中引用?

typedef struct node{ 
    int charSize; 
    char english[30]; 
    char span[40]; 
    struct node *left; 
    struct node *right; 
} BST; 

我想比較兩個字符數組。在Xcode中,它不會給我任何警告,使用下面的代碼行來比較數組,但我確定它是錯誤的,並想知道爲什麼它不給我一個錯誤。

if (head->english <= head2->english) 
    printf("headOne is smaller or equal"); 
else 
    printf("headOne is Bigger"); 
+1

嘗試使用strcmp。 –

+0

僅僅因爲某些東西是合法的並不意味着它就是你想要做的。 –

+0

http://stackoverflow.com/questions/1461432/what-is-array-decaying –

回答

1
if (head->english <= head2->english) 

它爲什麼不給我一個錯誤。

因爲比較指針head->englishhead2->english是合法的。記住數組名(字符數組或任何其他類型的數組)是指向第一個元素的指針。所以在這裏你實際上是比較這兩個指針。

當然這不是你想要的,你需要strcmp來比較C字符串。

+0

所以在這個意義上,我比較了數組的第一個元素。兩個陣列的第一個元素是相同的,那麼爲什麼它不打印「headOne更小或相等」? –

+0

它們是第一個元素的指針,而不是第一個元素本身 – artm

+0

謝謝你的幫助! –

1

if (head->english <= head2->english)將比較指針的值,即指向它們指向的地址。不是內存地址的內容。

strcmp()實際上會比較字符串中字符的個別值,所以它對排序更有用。

如果你想確定哪個字符串更長,你應該使用if (strlen(head->english) <= strlen(head2->english))