2016-12-03 15 views
1

私はBSTを構築しようとしています。私の構造体。ノード内の参照?

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

私は2つの文字配列を比較しようとしています。 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を比較するのは合法です。配列名(文字配列または他の型の配列)は、最初の要素へのポインタであることを覚えておいてください。ここでは実際にこれらの2つのポインタを比較しています。

もちろん、それはあなたが望んでいない、あなたはstrcmp Cの文字列を比較する必要があります。

+0

この意味で私は配列の最初の要素を比較しています。両方の配列の最初の要素は同じですから、なぜ "headOne is smaller or equal"という文字列が印刷されないのですか? –

+0

最初の要素ではなく最初の要素へのポインタです – artm

+0

ありがとうございました! –

1

if (head->english <= head2->english)は、ポインターの値、つまりポインターのアドレスを比較します。メモリアドレスの内容ではありません。

strcmp()は実際には文字列内の文字の個々の値を比較するので、ソートにはもっと便利です。

文字列の長さを判断する場合は、if (strlen(head->english) <= strlen(head2->english))

関連する問題