sscanfで.←ドットくぎりを読み込むには? – プログラミング – Home

sscanfで.←ドットくぎりを読み込...
 
通知
すべてクリア

[解決済] sscanfで.←ドットくぎりを読み込むには?


こっとん
 こっとん
(@こっとん)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

開発環境は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など参考に考えてみたところ[]や~あたりを駆使すれば・・・と思い色々してみ
ましたがダメでした。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

scanfで読み取ることが条件ですか?
strtok使って'.'で区切る方がずっと楽ではないかと。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

(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個目の %[^.] が適切かどうかは疑問の残るところでしょう。


返信引用
こっとん
 こっとん
(@こっとん)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました