- ベストアンサー
C言語のsscanf関数の上手な使い方2
質問NO.60489の追加です。 C言語で、 char buf[256] = "\"aa, aa\",100,\"bb bb\",200,\"cc-cc\"; char c1[10],c2[10],c3[10]; int i1,i2; のとき、 c1 = "aa, aa" c2 = "bb bb" c3 = "cc-cc" i1=100 i2=200 に読み込みたいのですが、 sscanf(buf,"\"%[^\"]\",%d,\"%[^\"]\",%d,\"%[^\"]\"",c1,i1,c2,i2,c3); では失敗します。 sscanfのformat部分をどのように書いたらよいか分かりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
基本的にあっていると思います。基本的にというのは, char buf[]...の行に"が1個足りない。sscanfでi1, i2がそれぞれポインタで呼ばれていない。の2点が間違っていると思います。それ以外では間違っていないからです。 ちょっと質問なのですが, c1に"も含めるのですか?そうすると, ちょっとわかりません。 自分がやった結果をちょっと長いですが載せたいと思います。 /* sscanf.c */ #include<stdio.h> int main(void){ char buf[256] = "\"aa, aa\",100,\"bb bb\",200,\"cc-cc\""; /* ちょっと変更を加えた。 */ char c1[10],c2[10],c3[10]; int i1,i2; sscanf(buf,"\"%[^\"]\",%d,\"%[^\"]\",%d,\"%[^\"\"",c1,&i1,c2,&i2,c3); /* ちょっと変更を加えた。*/ puts(c1); puts(c2); puts(c3); printf("%d, %d", i1, i2); return 0; } /* 実行結果 $はプロンプト $ sscanf aa, aa bb bb cc-cc 100, 200$ */
その他の回答 (1)
- kazuya-i
- ベストアンサー率21% (7/32)
物の本を読むとscanf系は使わないほうがいいって出てませんか? 想定外の文字がくると動作がおかしいから かな 自前で関数を作ったほうがいいと思います。 文字列の長さのチェックもしてくれないし(^^
お礼
ご回答ありがとうございます。 単純なミスでした。 sscanfで、&i1, &i2になっていませんでした。 急いでいたので、ありがとうございました。