首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sprintf()的可定制实现

sprintf()的可定制实现
EN

Stack Overflow用户
提问于 2009-03-04 13:26:13
回答 10查看 17K关注 0票数 3

有没有人能给我推荐一个源代码文件或者一个包,里面有一个很好的、可重用的用C语言实现的sprintf(),我可以根据自己的需要进行定制?

解释为什么我需要它:字符串在我的代码中不是null终止的(二进制兼容)。因此,除非我修复代码以理解如何呈现字符串,否则sprintf("%s")是无用的。

感谢quinmars指出,有一种方法可以通过%s打印字符串,而不会以null结尾。虽然它现在已经解决了这个问题,但我最终还是需要为使用变体的高级函数实现sprintf (或snprintf)。到目前为止,在我看来,SQLite的实现是最好的。感谢道格·柯里指出这一点。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-03-04 14:09:31

我还没有试过,因为我这里没有编译器,但阅读手册页,看起来您可以传递‘%s’的精度:

...如果给定了精度,则不需要存在空字符;如果未指定精度,或者该精度大于数组的大小,则数组必须包含终止NUL字符。

那么你有没有尝试过这样做呢?

代码语言:javascript
复制
snprintf(buffer, sizeof(buffer), "%.*s", bstring_len, bstring);

正如我所说的,我还没有测试过它,如果它工作了,它当然只有在字符串中没有‘\0’字节时才能工作。

编辑:我现在已经测试过了,它可以工作了!

票数 5
EN

Stack Overflow用户

发布于 2009-03-04 13:28:29

你真的应该寻找snprintf (考虑到输出缓冲区大小的sprintf);谷歌建议使用http://www.ijs.si/software/snprintf/

票数 3
EN

Stack Overflow用户

发布于 2009-03-04 13:56:22

作为SQLite here的一部分,有一个很好的公共域实现。

我同意Dickon Reed的观点,您需要snprintf,它包含在SQLite版本中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/610534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档