格式化char*,类似于“printf”,但不打印出来

Posted

技术标签:

【中文标题】格式化char*,类似于“printf”,但不打印出来【英文标题】:formatting char*, similiar to "printf", but without printing out 【发布时间】:2017-10-27 02:14:41 【问题描述】:

给定一个char *str = "something %s something2 %d",我怎样才能格式化它并生成一个新字符串而不打印出来?我知道“printf”会打印出结果,但我不需要打印出结果。

【问题讨论】:

您正在寻找snprintf() 及其亲属。 【参考方案1】:

答案是sprintf:它恰好是缓冲区的printf

【讨论】:

请不要推荐sprintf,而总是推荐snprintf或类似的。 @M.M:如果使用得当,一切都会好起来的。尽管如此,错误仍然存​​在。它们的存在是因为人类犯了错误并且没有正确使用事物。为了解决这个问题,我们开发了各种技术来防止和减少错误。 snprintf 就是其中之一。应该推广安全编程技术。 除非检查snprintf() 的返回值(是否为负且太大),否则臀部生成的字符串本身就是一个问题。如果目标不足,则不应使用 snprintf() 或 ``sprintf()`。.. 哦,好吧,如果我说snprintf 有人会抱怨微软有更好的......哦,等等,他们已经做到了。 @M.M:我将授予静态大小的实用程序(因此您可以使用自动存储)。但我倾向于将其视为一种优化:3 和 %100 严格且不可见地联系在一起。【参考方案2】:

你想要snprintf。就像printf,但是你给它一个目标缓冲区和一个大小。 (大小很重要,所以snprintf可以确保不要溢出它。)这样使用它:

char outbuf[100];
snprintf(outbuf, sizeof(outbuf), "%d %f %s %c", 1, 2.3, "four", '5');

【讨论】:

以上是关于格式化char*,类似于“printf”,但不打印出来的主要内容,如果未能解决你的问题,请参考以下文章

printf 字符串格式化

printf 字节内容时的ffffff 问题

Node.js中util.format()-类似于printf格式字符串

Node.js中util.format()-类似于printf格式字符串

golang fmt格式“占位符”

格式化输出字符串——sprintf