4

おそらくかなり一般的な問題があり、私が気付いていない美しいハックが含まれている可能性があります。誰かが私を啓発してくれれば幸いです!

C の sscanf() 関数を使用して入力を解析しています。形式は "%d %d %d %s %d %s %d ..." で、最初の 2 つの %d は文字列のランダムな ID 整数 (重要ではありません) です。 3 番目は、続く %d %s の組み合わせの数です。

たとえば、「12 34 2 3 yes 2 no」は文字列で、ランダムな 12 と 34 は ID (この問題では重要ではありません) であり、2 は「3 yes」と「2 no」に続く 2 つの組み合わせを指定します。前の 3 の「yes」は、後続の文字列の長さを指定します。前に 2 がある「no」についても同じことが当てはまります。これらの組み合わせの可変数が続く可能性があり、sscanf でそれらすべてをキャッチしたい場合。

sscanfでこれを行う方法を知っている人はいますか?

どうもありがとう!

4

4 に答える 4

0

最初の "%d %d %d" ヘッダーに続く %d %s ペアの数に最大値はありますか? おそらく struct { int i; のどこかに値を入れているので、そこにあるに違いありません。char s[j]; } [n]; 適切な j および n サイズで。

(ところで、あなたの例では、説明が「%d %d %d %d %s %d %s %d % s ..."、小数点以下 3 桁、その後に 10 進数/文字列のペア)

最大値がある場合は、最大化されたテンプレートを作成し、正常に一致して割り当てられた入力項目の数を示す sscanf からの戻りコードが、3 番目の値から 3 つのヘッダー項目を引いたものであることをテストします。3 番目の int と比較して戻りコードが正しくない場合は、不正な形式の行を報告してください。

私はかつてこのような関数を作成したので、a[n] は自動的にスタックをイオン化し、関数は sscanf-ed 項目のヒープからリンクされたリストを割り当て、最初の項目へのポインターを返しました。

于 2013-03-31T05:05:58.960 に答える