0

CSV ファイルからいくつかの値を読み取るために fscanf を使用していますが、値に読み込まれたデータが大きすぎてバッファ オーバーフローが発生しないようにしたいと考えています。

私の csv ファイルの形式は int,string,string で、読み取るコードは次のとおりです (while 条件は後で修正します)。

while(fscanf(f, "%d,%[^,],%[^,]", &inArray[i].ID, inArray[i].label, inArray[i].brand)/*insert while condition here*/

scanf を使用する場合、オーバーフローを防ぐために次のように長さを指定します。scanf("%20f", example);

しかし、上記と同じことを試してみると: while(fscanf(f, "%d,%20[^,],%10[^,]", &inArray[i].ID, inArray[i].label, inArray[i].brand)/*insert while condition here*/

コードを実行するとクラッシュします。

4

3 に答える 3

3

試してみてくださいfscanf_s。この機能にはセキュリティ強化機能があります。 http://msdn.microsoft.com/en-us/library/6ybhk9kc(v=vs.90).aspx

于 2013-09-17T09:05:20.873 に答える
2

文字を読み取るときに fprintf でそれを行うことはできません。

最初に行全体を読み取り、getline()区切り記号を見つけて (または行をトークン化して)、個々の要素を解析します。

ところで、クラッシュの理由は、の定義/初期化が間違っている可能性もありますinArray

于 2013-09-17T09:05:25.317 に答える