当前位置:  开发笔记 > 编程语言 > 正文

安全printf到字符串的最佳方法?

如何解决《安全printf到字符串的最佳方法?》经验,为你挑选了4个好方法。

有没有人知道将printf样式函数的输出重定向到字符串的安全方法?显而易见的方法导致缓冲区溢出.

就像是:

string s;
output.beginRedirect( s );  // redirect output to s

... output.print( "%s%d", foo, bar );

output.endRedirect();

我认为问题与询问一样,"会产生多少个字符?" 想法?



1> Adam Peck..:

您可以使用:

std::snprintf 如果你正在使用char*

std::stringstream 如果你想使用字符串(与printf不同,但允许你使用普通的流函数轻松操作字符串).

boost::format如果你想要一个类似于printf的函数,它将与stream一起使用.(根据评论中的jalf)

fmt::format 这是标准化的,很可能成为 std::format


和boost :: format使用C++流获得类似printf的格式化功能

2> abyx..:

snprintf()函数打印到一个字符串,但只有给它的长度.

可能就是你要找的......



3> vitaut..:

fmt库提供fmt::sprintf执行printf兼容格式化的功能(包括根据POSIX规范的位置参数),并将结果返回为std::string:

std::string s = fmt::sprintf( "%s%d", foo, bar );

免责声明:我是这个图书馆的作者.



4> Kristopher J..:

既然你已经将它标记为C++(而不仅仅是C),我会指出在C++中执行此类操作的典型方法是使用stringstream,而不是printf系列.无需担心stringstreams的缓冲区溢出.

该升压格式库也可以,如果你喜欢的printf风格的格式字符串,但想要的东西更安全.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有