• ベストアンサー

文字列操作について(winsockの関数を用いています)

こんばんは。 Winsockを用いてネットワークプログラミングを行っています。 A→Bへパケットを送信し、B側にてinet_ntoa関数(IPアドレスを文字列として表示させる関数)を用いて、以下のif文の条件を記述したのですが、if文内の条件がうまく動作しません。 デバッガを使用し、IPaddr内を見てみたところ、フフフフフフフフ……と言う文字列?が入っている状態です。 IPaddrに例えば、192.168.100.50等のIPアドレスを格納可能でしょうか? IPaddr[256] strcpy(IPaddr,inet_ntoa(from.sin_addr)); if(IPaddr == inet_ntoa(from.sin_addr)){  //別関数へ } よろしくお願い致します。

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

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

> デバッガを使用し、IPaddr内を見てみたところ、 > フフフフフフフフ……と言う文字列?が入っている状態です。 どのタイミングで見ましたか? strcpy完了前(ifの行より前)でブレイクして確認したなら、 まだ未初期化なので、#1の方のいわれる通りです。 その後で格納されるのですね。 で、今回の > if文内の条件がうまく動作しません。 の原因は別のところにあります。 > if(IPaddr == inet_ntoa(from.sin_addr)){ C言語では、char*の"文字列"を" == で比較することはできません。" なので、if文がうまく動かないのです。 strcmp等を使ってください。 # もしもC++ なら std::string は == で比較可能です。

bird0214
質問者

お礼

こんにちは。 strcmp関数を用いることで解決することができました。 ありがとうございました。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

処理系が分かりませんが、 > デバッガを使用し、IPaddr内を見てみたところ、フフフフフフフフ……と言う文字列?が入っている状態です。 Visual C++なら、変数を初期化していないと、デバッグモードではそんな風に笑われたような気がします。

bird0214
質問者

お礼

こんにちは。 返答ありがとうございます。 >Visual C++なら、変数を初期化していないと、デバッグモードではそんな風に笑われたような気がします。 今までフフフフがでることにずっと疑問を抱いていたので、勉強になりました。

関連するQ&A