- ベストアンサー
IPアドレスを表示するプログラムの改善方法は?
- 質問文章のプログラムはIPアドレスを表示するもので、条件によって表示されるアドレスが異なります。しかし、処理を繰り返すと同じアドレスが表示されることや、条件に合うアドレスが表示されないことがあります。
- 質問者は、処理を繰り返す回数や条件を変えても、条件に合致するアドレスが表示された時点で処理を終了する方法を知りたいと述べています。
- プログラムの改善方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「補足」への回答です。状況が今ひとつ不分明ですが、「このアドレスを何かの変数に代入して別の部分でも表示したい」ということでしたら、 int main() { ... char *addr_ptr; char buf[256]; // ここへ移動 char *p = ""; // 追加 buf[0] = 0; // 念のため ... ... for (i = 0; i < 5; i++) { ... sprintf(buf, "%s", inet_ntoa(*(struct in_addr *) addr_ptr)); if (strncmp(buf, "196", 3) == 0) { printf("Your Address: %s\n", buf); p = buf; // 追加 break; } ... ... printf(("別の部分での表示%s\n", p); return 0; } とすれば、break 以降 p で "196.~" のアドレスが文字列として参照できます(196 で始まるアドレスが無かったときには p は空文字列 "" を指します)。 ということでよろしいでしょうか。
その他の回答 (1)
- oldroot2005
- ベストアンサー率66% (68/103)
下のように if が成立したときに break で for を脱出すればよいと思います。 for (i=0; i<5; i++) { char buf[256]; addr_ptr = (char *)&pUdpTable->table[i].dwLocalAddr; sprintf(buf, "%s", inet_ntoa(*(struct in_addr *)addr_ptr)); if(strncmp(buf, "196", 3) == 0) { // { を追加 printf("Your Address: %s\n", buf); break; // 追加 } // } を追加 }
補足
質問をもう一つ書きそびれたのでここで補足させていただきます。 ここで例えば Your Address:196.1.2.3 と表示されたとする時、このアドレスを何かの変数に代入して別の部分でも表示したいと考えています。しかし、単に printf("別の部分での表示%s\n",buf); とすると196以外から始まるアドレスのほかに、5回繰り返し処理された5つのアドレスも表示されてしまうので、うまく代入して表示するのはどうすればよいかも教えていたいただけませんか? お願いします。
お礼
お礼遅くなってすみませんm(__)m 先頭が196から始まるアドレスだけの表示と、この取得できたアドレスを別の部分表示することがoldroot2005さんのおかげで、できました。 どうもありがとうございました。