私は次の入力を持っています:
AG23,VU,Blablublablu,8
IE22,VU,FooBlaFooBlaFoo,3
and so on...
次のようなコードを使用してscanfで「解析」したい:
char sem[5];
char type[5];
char title[80];
int value;
while(scanf("%s,%s,%s,%d", sem, type, title, &value) == 4) {
//do something with the read line values
}
しかし、コードの実行は私に与えます:illegale instruction
このようなコンマ区切りファイルをどのように読みますか?
コンマは空白文字と見なされないため、書式指定子"%s"
は,
と、配列の境界を超えて書き込む行のすべてsem
を使用して未定義の動作を引き起こします。これを修正するには、スキャンセットを使用する必要があります。
while (scanf("%4[^,],%4[^,],%79[^,],%d", sem, type, title, &value) == 4)
どこ:
%4[^,]
は、最大4文字、またはコンマが検出されるまで読み取ることを意味します。幅を指定すると、バッファオーバーランが防止されます。