- ベストアンサー
fscanf(),scanf()とBuffer Overflow
scanf("%s", buf); で、bufの長さはどれくらいに取ればよいのでしょう。 sscanf(buf,"%s",buf2); なら、sizeof(buf)以上に大きくならないでしょうが、scanf(), fscanf()で文字列を読み込むときは、Buffer Overflowの危険から逃れられないような気がしています。 私はそのため、文字列を扱うときには、この二つの関数を使わないでいるのですが、安全な使用方法はあるのでしょうか? scanf("%10s",buf); のような使い方は知っています。でもこれでは文字数が10文字だったのか、それ以上だったのか判別できません。知りたいのは最大文字数が未知の場合です。 こう使えば安全という使い方があればぜひご紹介ください。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (11)
- jacta
- ベストアンサー率26% (845/3158)
回答No.12
- jacta
- ベストアンサー率26% (845/3158)
回答No.11
- jacta
- ベストアンサー率26% (845/3158)
回答No.10
- jacta
- ベストアンサー率26% (845/3158)
回答No.9
- rentahero
- ベストアンサー率53% (182/342)
回答No.8
- rinkun
- ベストアンサー率44% (706/1571)
回答No.7
- rentahero
- ベストアンサー率53% (182/342)
回答No.6
- jacta
- ベストアンサー率26% (845/3158)
回答No.5
- rinkun
- ベストアンサー率44% (706/1571)
回答No.4
- jacta
- ベストアンサー率26% (845/3158)
回答No.3
- 1
- 2
お礼
ありがとうございます。 なかなかよい案だと思います。ただ、10文字を超えていたとき次の読み込みで、文字列を繋ぎ修復する処理が厄介ですね。