プロが教える店舗&オフィスのセキュリティ対策術

質問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部分をどのように書いたらよいか分かりません。

A 回答 (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$
*/
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
単純なミスでした。
sscanfで、&i1, &i2になっていませんでした。
急いでいたので、ありがとうございました。

お礼日時:2001/04/09 09:10

物の本を読むとscanf系は使わないほうがいいって出てませんか?



想定外の文字がくると動作がおかしいから かな
自前で関数を作ったほうがいいと思います。

文字列の長さのチェックもしてくれないし(^^
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!