C有真正安全的格式化库吗?

时间:2009-05-09 23:27:24

标签: c formatting string-formatting

请注意针对C的 safer 格式库问题的答案,我想知道是否有安全 C格式库?

我的意思是:

  • 不可能将格式字符串与参数
  • 不匹配
  • 传递错误的类型
  • 不可能崩溃
  • 没有与平台相关的方面

请不要回答关于Microsoft Safe String Library不安全但仍然不完全安全的库,因为我知道这些,并且他们不满足总安全要求。

提前致谢

3 个答案:

答案 0 :(得分:6)

你是用C写的.C不是类型安全的。如果您传递int*而不是char*,则无法避免未定义的行为。如果你的变量没有为运行时检查进行静态类型检查/标记,那就没有“没有可能性”。

如果你有某些产生警告的东西,那就已经很好了......

如果您真的需要或想要安全,您可能需要查看cyclone(C方言)或一些完全不同的语言。

答案 1 :(得分:5)

  

不可能将格式字符串与参数

不匹配

如果你想要一个格式字符串,没有特殊的编译器支持你基本上不能这样做。也就是说,如果你放弃格式字符串,你可以在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);

如果有点冗长,这样的事情将非常安全。

答案 2 :(得分:1)

不,因为你引入的任何“安全”都可以被语言所支配。这就像在沙滩上建造你的城堡 - 无论城堡有多好,如果你从它下面挖出沙子,它仍然可以摔倒。

C中没有强制执行特定参数类型的机制,也不存在。

如果人们不按照自己的意愿使用你的工具,那就是我自己的问题。你不应该为三岁的孩子提供软件 - 他们预计会有一些智慧。