2016-09-08 3 views
0

私はこのコードを書いてこのコードを書いていますが、取得リクエストが適切かどうかをチェックしますが、最後の比較では期待した結果が得られません最後のif文return trueを返すときにfalseを返します。なぜこれらの2つの文字列が等しくないのですか

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char* string="GET /cats.html HTTP/1.1\r\n"; 
    if(strncmp(string,"GET ",4)==0) 
    { 
     printf("hello"); 
     if(string[4]=='/') 
     { 
      printf(",\n"); 
      char* string1=strchr(string,'.'); 
      string1=strchr(string1,' '); 
      printf("%s",string1); 
      if(string1!=NULL) 
      { 
       if(*string1==" HTTP/1.1\r\n") 
       { 
        printf("world\n"); 
       } 
      } 
     } 
    } 
} 
+0

実際に何が得られますか? –

+0

それはhello、worldを出力するはずですが、helloで停止します。 –

+3

コンパイラは警告しなければなりません。コンパイラ警告を無視しないでください。また、推奨される警告を有効にします。 – Olaf

答えて

4

ライン:

if(*string1==" HTTP/1.1\r\n") 

2つの文字列が等しいかどうかを比較しません。

タイプstring1は、char*です。従って*string1のタイプはcharです。

したがって、charchar const*を比較していますが、これは予想外のものです。でもあなたはそれがすべての時間、このユースケースではfalseになります平等のための2つのポインタを、比較されますので、期待した結果が得られません

if(string1==" HTTP/1.1\r\n") 

を使用して

使用する必要があるのは、2つの文字列を比較するライブラリ関数です。

if(strcmp(string1, " HTTP/1.1\r\n") == 0) 
1

文字列を比較していないため、ポインタを文字列と比較しています。

適切な比較は次のようになります

if(!strcmp(string1," HTTP/1.1\r\n")) { 
    ... 
} 
+0

それは私の評判がまだ低いので、私は投票することはできませんし、答えは11分で受け入れられる非常にありがとう、ありがとう –

+1

あなたはあなたの担当者に私の "2セント"を持っています。 ;) – Serge

+0

@ Serge: "...あなたは文字列へのポインタを比較しています..." OPはポインタを文字列とどのように比較しますか? '* string1'は" stringへのポインタ "ではありません。 – AnT

関連する問題