sscanfで.←ドットくぎりを読み込むには?

[戻る]
こっとん 2005/02/07(月) 04:55:52
開発環境はVC++6.0SP6適用、Win2000です。
今回、文字列に192.168.1.1というIPが入っていてそれをsscanfにてそれぞれの要素に分割し
たいのですがうまくいきません。

char ip1[4];
char ip2[4];
char ip3[4];
char ip4[4];
strcpy(tmpStr,"192.168.1.1");
sscanf(tmpStr,"%s.%s.%s.%s",ip1,ip2,ip3,ip4);

sscanfについては前前から、半角スペース区切りはうまくいっていたのですがそれ以外ではよ
く躓いています。
次のドットまでを読むという風にしていく方法はありますが、sscanfでぱっととる方法がある
ようなら教えていただけませんか?
一応自分なりにK&Rなど参考に考えてみたところ[]や~あたりを駆使すれば・・・と思い色々してみ
ましたがダメでした。

επιστημη 2005/02/07(月) 07:01:47
scanfで読み取ることが条件ですか?
strtok使って'.'で区切る方がずっと楽ではないかと。

tetrapod 2005/02/07(月) 08:31:51
(s)scanf で読みたいならこんな感じ。

int ip[4];
int n=sscanf("192.168.123.45", "%d.%d.%d.%d", ip+0, ip+1, ip+2, ip+3);
char is[4][4];
int m=sscanf("192.168.123.45", "%[^.].%[^.].%[^.].%[^.]", is+0, is+1, is+2, 
is+3);

is の文字数のオーバーフローチェックは故意に行っていません。宿題ということで。
# 4個目の %[^.] が適切かどうかは疑問の残るところでしょう。

こっとん 2005/02/07(月) 23:10:44
[[解決]]
お返事ありがとうございます。
ちょうど今日の昼に調べていてstrtokを発見しさっそくやってみようとしていたところでし
た。
またScanfですが成功しました!
[]と^つかってできたはずだけどどうすればいいんだろうと色々探してて結局わからずじまいだ
ったのでとても疑問が晴れすっきりしました。
本当にありがとうございます!

古いスレッドには追加発言できません。