德尔福中的sprintf?
有谁知道 Delphi 的 C/C++ printf 的 100% 克隆吗? 是的,我知道 System.Format 函数,但它可以处理一些事情有点不同。
例如,如果要将 3 格式化为“003”,则在 C 中需要“%03d”,但在 Delphi 中需要“%.3d”。
我有一个用 Delphi 编写的应用程序,它必须能够使用 C 格式字符串格式化数字,那么您知道这方面的代码片段/库吗?
提前致谢!
Does anyone know a 100% clone of the C/C++ printf for Delphi?
Yes, I know the System.Format function, but it handles things a little different.
For example if you want to format 3 to "003" you need "%03d" in C, but "%.3d" in Delphi.
I have an application written in Delphi which has to be able to format numbers using C format strings, so do you know a snippet/library for that?
Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用 Windows.pas 中的 wsprintf() 函数。不幸的是这个函数没有在 Windows.pas 中正确声明,所以这里是一个重新声明:
You could use the wsprintf() function from Windows.pas. Unfortunately this function is not declared correctly in the Windows.pas so here is a redeclaration:
如果你想让这个函数看起来对用户来说对 Delphi 更友好,你可以使用以下代码:
If you want to let the function look more Delphi friendly to the user, you could use the following:
不建议使用 (ws)printf 因为它们容易出现缓冲区溢出,最好使用安全变体(例如 StringCchPrintF)。它已经在 Jedi Apilib (JwaStrSafe) 中声明。
It's not recommended to use (ws)printf since they are prone to buffer overflow, it would be better to use the safe variants (eg StringCchPrintF). It is already declared in the Jedi Apilib (JwaStrSafe).
好吧,我刚刚找到了这个:
它只是使用
msvcrt.dll
中的原始 sprintf 函数,然后可以像这样使用它:我不知道这是否是最好的解决方案,因为它需要这个外部dll 并且您必须手动设置字符串的长度,这使得它容易出现缓冲区溢出,但至少它可以工作......有更好的想法吗?
Well, I just found this one:
It simply uses the original sprintf function from
msvcrt.dll
which can then be used like that:I don't know if this is the best solution because it needs this external dll and you have to set the string's length manually which makes it prone to buffer overflows, but at least it works... Any better ideas?
则更干净的方法,无需不必要的类型转换
如果您碰巧为 Windows CE 应用程序进行交叉编译, 。使用 coredll.dll 而不是 msvcrt.dll
more clean approach without unnecessary type casting
If you happen to cross compile for Windows CE App. use coredll.dll instead of msvcrt.dll