質問

ある質問に対する答えを念頭に置いて、 より安全な C 用の書式設定ライブラリがあるかどうか疑問に思っています。 安全 Cフォーマットライブラリ?

私が言いたいのは:

  • 引数のフォーマット文字列が一致しない可能性はありません
  • 間違った型を渡してもクラッシュする可能性はありません
  • プラットフォームに依存する要素はありません

については答えないでください Microsoft セーフ文字列ライブラリ, 、またはそれ以下のライブラリ 危険な しかし、私が知っている限り、完全に安全というわけではなく、完全な安全の要件を満たしていません。

前もって感謝します

役に立ちましたか?

解決

あなたはC. Cで書いているタイプセーフではありません。あなたはint*の代わりにchar*を渡す場合は、未定義の動作を避けることができません。あなたの変数は静的型チェックされていない場合は/ランタイムチェックのためにタグ付けされた「何の可能性はありません」などというものはありません。

あなたは警告を生成し、何かを持っている場合、それはすでにかなり良いことだ...

あなたが本当に必要 のか、安全性が必要な場合は、

は、サイクロンを見てすることができますの(C方言)、またはいくつかの完全に異なる言語

他のヒント

  

の引数からフォーマット文字列を不整合に何の可能性はありません。

あなたはフォーマット文字列を使用する場合は、

は、特別なコンパイラのサポートなしで、あなたは基本的にそれを行うことはできません。つまり、フォーマット文字列を見送る場合は、Cでの安全なフォーマットのライブラリを持つことができ、と述べました。私は認識していないんだけど、彼らは存在していた場合、私は驚かないだろう。

一つは、のようなインタフェースを持つことができます:

typedef ... FORMATTER;

FORMATTER create_formatter();
int fmt_add_string_default(FORMATTER f, const char *s);
int fmt_add_string(FORMATTER f, const char *s, int maxlength, const char fill, enum fmt_alignment align);
...
int fmt_add_decimal_default(FORMATTER f, int d);
... // you get the idea
int fmt_write_result(FORMATTER f, char *out, int out_length);
void destroy_formatter(FORMATTER f);
少し冗長な場合は、

このような何かは、完全に安全になります。

いいえ、あなたが紹介するものは何でも「安全」は言語によってsubornedすることができるからです。それは砂の上にお城を構築するようなものだ - あなたがそれの下から砂を掘る場合は、城が、まだ収めることができているどのように良い関係ありません。

特定のパラメータの型を強制するCでの機構がない、またあるはずです。

それらが意図しているとして、人々はあなたのツールを使用しない場合、それは私の意見では、自分自身の問題です。あなたは、3歳児にソフトウェアを提供することになっていない - 彼らは知性の一部ささやかが期待している。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top