• ベストアンサー

strcmpでIP比較

お世話になります PHPのstrcmp()を使ってIPアドレスの比較をしているのですが、全く同じIPアドレスなのに0を返してくれません。 何故でしょうか? echo strcmp(999.99.999.999,999.99.999.999); -1が返ってきます。 宜しくお願いします。

noname#227352
noname#227352
  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

>echo strcmp(999.99.999.999,999.99.999.999); 文法エラーですけど。 echo strcmp("999.99.999.999","999.99.999.999"); だと 0 になるはず。

関連するQ&A

  • strcmp( )関数について教えて下さい

     今日は、Cの初心者です、宜しくお願いします。  a,bが一文字のとき、「if(strcmp(a,b)==0)」では、a,bの大小は辞書に出てくる順序を返すとありますが、 a="abcde",b="xyz"として「if(strcmp(a,b)==0)」とかくと、これは文字の長さを比較するのでしょうか。  それとも先頭文字のについて、辞書に出てくる順序の大小を返すのでしょうか。  本を読むと単に「比較する」とだけしか書いてないのですが、一体「文字」又は「文字列」の何を比較するのでしょう。  「辞書に出てくる順序」なのでしょうか、それとも「長さ」なのでしょうか。  一方が文字列(p="xyz")でもう一方が一文字(q)で「if(strcmp(p,q)==0)」のときは何を比較するのでしょうか。  宜しくお願いします。

  • strcmpの返り値

    strcmpを実行したのですが、比較した値は、同じ値なのですが、返り値が"2"です。結果が"2"になることはありますか?どのような意味でしょうか?

    • ベストアンサー
    • PHP
  • strcmpで警告が…

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=2352461 で、質問させて頂いた者です。 ご回答の通りに「strcmp」を使って、 if (strcmp(&dou[i].tiku , &dou[i-1].tiku)){ printf("-----------------------\n"); } と、してみたところ 上手く動くようになりました。 ただ、 >警告 W8065 kadai3-2.c 32: プロトタイプ宣言のない関数 'strcmp' の呼び出し(関数 main ) という警告が出てしまいます。 対処方法をご存じでしたら、 ご教授して頂けたら幸いです。

  • 文字列比較の演算子

    Perl の世界から PHP にやってまいりました。 Perl では、文字列の比較には専用の演算子がありまして、 str1 eq str2 とすると、二つの文字列が同値かどうか調べられますが、PHP にはこのような演算子はないのでしょうか? www.php.net のマニュアルを見ても、そのような演算子がありません。 == 演算子が使えるものかと <?php $str1 = "this is string" ; $str2 = "this is string" if( $str1 == $str2 ) { echo "two string is same" ; } ?> などを試してみるとうまくいくようですが、www.php.net のマニュアルには「文字列を数値化して比較する」と書いてあり、本当に文字列比較が出来るか確信がもてず…。 結局、文字列を比較したいときには strcmp を呼び出していますが、これは PHP 的には正しいのでしょうか?

    • ベストアンサー
    • PHP
  • アドレスの比較について

    こんにちは。質問させてもらいます。 pcap.hを使って、取得したパケットの送信元アドレスと送信先アドレスを比較させて、違うアドか同じアドかを判断したいと考えています。 しかし、送信元アドレスと送信先アドレスが明らかに違うのに、同一だと判断してしまいます。原因を教えてもらえないでしょうか。 ipアドレスを格納する構造体は struct ip { struct in_addr ip_src, ip_dst; }; としました。 ↓が試した方法です。 1.inet_ntoaの値をそのまま比較 if ( inet_ntoa(ip->ip_src) == inet_ntoa(ip->ip_dst) ) { printf("\nアドレスいっしょ\n"); //↓はアドレスが違っているかどうか確認 printf("src:%s\n",inet_ntoa(ip->ip_src)); printf("dst:%s\n",inet_ntoa(ip->ip_dst)); } else { printf("\nアドレス違う\n"); } 2.strcmpを使う if ( strcmp(inet_ntoa(ip->ip_src),inet_ntoa(ip->ip_dst)) == 0) { printf("\nアドレスいっしょ\n"); printf("src:%s\n",inet_ntoa(ip->ip_src)); printf("dst:%s\n",inet_ntoa(ip->ip_dst)); } else { printf("\nアドレス違う\n"); } どちらでやってもアドレスは同じと判断してしまいます。printfで確認するときっちり違うアドが表示されるのに・・何故? きちんとアドレスを比較してくれるようにif文の中身を変えたいです。 ご助力お願いできますか。

  • PHPのstrcmp関数について

    PHPのstrcmp関数の動きがよくわかりません。 strcmp (PHP 4, PHP 5) strcmp — バイナリセーフな文字列比較 説明 int strcmp ( string $str1 , string $str2 ) この比較は大文字小文字を区別することに注意してください。 パラメータ str1 最初の文字列。 str2 次の文字列。 返り値 str1 が str2 よりも小さければ < 0 を、str1が str2よりも大きければ > 0 を、 等しければ 0 を返します。 ・・・・・・・・・とマニュアルには上記のようにあります。 聞きたい事!▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 1 このstr1がstr2より大きいとはどういうことでしょうか? 2 実際に動きを確認するためにstrcmp関数を他のPHPのビルトイン関数で実現できないのでしょうか? 私の想像では、この関数にあたえる二つの引数を10進数に変換して、値の大きさを比較するという方法なのですが・・。 たとえば <?php $str01 = "a"; $str02 = "b"; print strcmp($str01,$str02); print "<br />"; //上記の値は-1がでるためこの場合 $aのほうが$bより小さいことになる。 //$aの値の文字aが小さいとは?どういうことか //私の、ぱっと思いついた方法は、以下のような意味? $str01 = bin2hex($str01); print $str01 ; //16進数でaという値を表すと61がでる print "<br />"; $str01 = hexdec($str01); print $str01; //10進数でaという値を表すと97がでる print "<br />"; //上記を同じく$bに行うと $str02 = bin2hex($str02); print $str02 ; //16進数でaという値を表すと62がでる print "<br />"; $str02 = hexdec($str02); print $str02; //10進数でaという値を表すと98がでる print "<br />"; print "<hr />"; /* 結果、$aは$bより 【小さい】という事なのでstrcmpは-1を返したと・・・。 こういう事をかんがえてみました。 そしてこれは、普通に考えれば a => bという順序なので アルファベット順になります。 しかしこのやり方だと */ $str03 = "aaaaaaa"; $str04 = "bb"; //と上記のような文字列があった場合同じく同じ手順で値をだすと $str03 = bin2hex($str03); print $str03 ; //16進数でaという値を表すと61616161616161がでる print "<br />"; $str03 = hexdec($str03); print $str03; //10進数でaという値を表すと27410143614427489がでる print "<br />"; //上記を同じく$bに行うと $str04 = bin2hex($str04); print $str04 ; //16進数でaという値を表すと6262がでる print "<br />"; $str04 = hexdec($str04); print $str04; //10進数でaという値を表すと25186がでる print "<br />"; /*ただ上記の方法だと、$str03と$str04を比較すると$str04の【bb】という値の方が 小さくなり順序的には bb => aaaaaaとなりアルファベット順にするとこができない。 三つ目の質問 3 アルファベット順にソートしたいとき標準のsort関数を使わずに他のPHPの標準関数の組み合わせでアルファベット順に並び替える 関数はつくれないのか? どなたか、ご意見お聞かせください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • strcmpでの &

    #include<stdio.h> #include<string.h> int main(void){ char data[10],sort; int i,j; printf("10文字入力してください。\n"); for(i=0;i<=10;i++){ data[i]=fgetc(stdin); /*---挿入ソート---*/ sort=data[i]; j=i-1; while((strcmp(data[j],sort) > 0) && (j>=0)){/*ここでstrcmp(&data[j],&sort)にするとできるんですが。*/ data[j+1]=data[j]; j--; } data[j+1]=sort; } for(i=0;i<=10;i++){ fputc(data[i],stdout); } return(0); } 何故& を入れるだけでエラーが出なくなるのかわかりません。 アドレスを比べて何故大小が出るのか… よろしくおねがいします。

  • PHP時間の比較

    お世話になっております。 毎度、毎度、どうも日付や時間の比較で戸惑ってしまいます; 今回はPHPの時間の比較なのですが。 現在の時刻が午前8:00より前か後かで処理を分けたいと思っております。 $totime =date("H:i"); IF($totime > "8:00"){ echo "8:00より後"; } else { echo "8:00より前"; } というような感じで書いたのですが。 $totimeが10:00のときelse処理を通ってしまいます… ご教授願います;;

    • ベストアンサー
    • PHP
  • IPアドレスについて

    $host = gethostbyaddr ( "192.168.0.1" ); echo $host."\n"; //ホスト名からIPアドレスのリストを取得します。 $arr_ip = gethostbynamel($host); foreach($arr_ip as $str_ip) { echo $str_ip . "\n"; これで、IPアドレスを取得する事はできるのですが、 192.168.2.1 等に変更したい場合はどうすればいいのですか?? 前にも質問してのですが、どうしても諦められなくて… お願いします!!!

    • ベストアンサー
    • PHP
  • C言語 strcmp 半角スペースがあるとだめ?

    C言語 strcmp 半角スペースが文字列に含まれている場合 文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか? プログラム //strcmp #include <stdio.h> #include <string.h> int main(void){ char input[256]; char str[] = "HelloWorld!";   //char str[] = "Hello World!";だとうまくいかない。 printf("%s\n>", str); scanf("%s", input); if ( strcmp(input, str) == 0){ printf("同じです。\n"); }else{ printf("違います。\n"); } return 0; }

専門家に質問してみよう