2017-05-16 15 views
0
struct smt{ 
char *c; 
}; 



int main(){ 
    char *w="astring"; 
    if(smt->c == w[0]) 
    ...do something 
} 

ifとexaclyが引き起こす警告を修正するにはどうすればよいですか?警告:ポインタと整数の比較

+0

エラーメッセージを読んで、あなたが理解しておく必要があり、あなたの ''([0]ワットsmt-> C ==)場合を読む:P – Nathan

答えて

0

エラーは、しばしば(ほとんどの場合)、は、にはアドレス(ポインタ)と文字を比較したくないという事実に由来します。

あなたは、char '' とのchar * cを比較しています。何がやりたいことはこれである私は信じている:

struct smt{ 
    char *c; 
}; 



int main(){ 
    char *w="astring"; 
    // Here smt->c returns a char* 
    // w[0] gets you the first character, so 'a' 
    if(strcmp(smt->c, w) == 0) 
    ...do something 
} 

あなたは両方の文字列の最初の文字を比較したい場合は、「> C

1

警告があなたのために現れるsmt-する[0]を追加する必要があります(この比較のために暗黙的にintにキャストされることを)文字ですw[0]に、char*あるsmt->cを、比較再。

おそらく、このような最初の文字の比較意味:あなたは完全な文字列を比較したい場合は、

if(strcmp(smt->c, w) == 0) { ... } 

またはより良いを使用

if(smt->c[0] == w[0]) { ... } 

を、あなたは最大の長さを知っていればstrncmpを使用文字列に含めることができます。

関連する問題