2016-04-19 4 views
-1
if(s.name=="kolkata")  
{ 
    printf("the details"); 
} 
if(strcmp((s.name,"kolkata")==0) 
{ 
    printf("the details"); 
} 

最初の 'if'の場合には構文エラーはありませんが、まだ動作しませんが、2番目の 'if'の場合は非常に効率的です?このコードのif caseは動作しません

+2

あなたは最初の場合にstrcmpを使用していません。そのためです。構文エラーがないことは必要ですが、十分ではありません。 – jboockmann

+0

オブジェクトをオブジェクトと比較する最初のifステートメントと異なるオブジェクトです。 secondはオブジェクトの内容を比較している場合です。 –

+0

2番目の文は構文的に正しいものではないためです。そして、あなたは2番目が効率的ではないという「情報」をどこに持っていますか?あなたは決してこのコードを実行しなかったので、あなたは決してパフォーマンスを測定しませんでしたか? –

答えて

6

最初のケースはそれだけでを意図していないように動作し、全くを動作しないようにされていません。コードを1として

if(s.name=="kolkata") 

はポインタ自身を比較しようとする試みです。これらのポインタによるメモリ位置ポインタの内容を比較しません。あなたがC11を引用し、構文エラーを期待していたポイントに来

、章6.5.9、等価演算子の制約、(==

  • 両方のオペランドは、資格へのポインタですか、互換性のある型の非修飾バージョン。

ので、

if(s.name=="kolkata") 

は、ビューの構文の点から、完全に有効と合法的なCコードです。論理的には、メモリ領域ポインタの内容をポインタで比較すると予想される場合、このコードは役に立たず、意味をなさない。

+0

入力が "kolkata"の場合、出力は "詳細"でなければなりません。しかしそうではありませんでした。 –

+0

*実際のコードは何でしたか? –

+0

@WeatherVane –

関連する問題