我的问题是从安全的角度来看的。我正在清理一些代码,我发现当前代码存在不受控制的格式字符串漏洞;它将一个字符串传递给类似的printf()
东西:
void print_it(char * str)
{
printf(str);
这显然被认为是不安全的编程,即使 gcc 通常也会给你发出至少某种警告:
警告:格式不是字符串文字,也没有格式参数
现在要“修复”问题,我们可以确保您得到的内容被视为字符串
printf("%s", str);
但我想知道是否有任何......使用长度指定器的额外安全性。就像是:
printf("%.*s", (int)sizeof(str), str);
我想不出有什么理由会更安全,但如果我在这里遗漏了一些明显的东西,我也不会感到惊讶。