请注意针对C的 safer 格式库问题的答案,我想知道是否有安全 C格式库?
我的意思是:
请不要回答关于Microsoft Safe String Library或不安全但仍然不完全安全的库,因为我知道这些,并且他们不满足总安全要求。
提前致谢
答案 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中没有强制执行特定参数类型的机制,也不存在。
如果人们不按照自己的意愿使用你的工具,那就是我自己的问题。你不应该为三岁的孩子提供软件 - 他们预计会有一些智慧。