格式化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”,但不打印出来的主要内容,如果未能解决你的问题,请参考以下文章
Node.js中util.format()-类似于printf格式字符串