c ++ printf问题:如何安全地将char*传递给printf?

Jos*_*son 1 c++ printf pointers

const char* abc = "foo";
printf(abc);
Run Code Online (Sandbox Code Playgroud)

这样安全吗?我看到了一些遗留代码,包括这个.谢谢!

非常非常抱歉..我犯了一个错误,我改回来了......

yan*_*yan 7

不,这不安全.假设abc指向一个有效的字符串(它当前没有),这种模式可能容易受到格式字符串漏洞的影响.请参阅格式化字符串攻击

编辑:我看到您修复了问题中的代码.它曾经abc作为第一个参数传递printf,这真的非常糟糕.既然你提出了第一个论点"%s",那就更好了.这两者并不相似,并且在安全性方面存在巨大差异,因此请在遗留代码中查找此模式.


Gle*_*ter 5

我假设你abc指向一个实际的字符串而不是空的。清理你的示例代码会很有帮助。

我过去曾这样做过写出静态字符串,但从未遇到过问题。回想起来,我很幸运。正确地说,它可能应该是这样的:

const char* abc = "foo";
printf("%s", abc);
Run Code Online (Sandbox Code Playgroud)