关于 sprintf 函数如何在 C 中工作的困惑

Posted

技术标签:

【中文标题】关于 sprintf 函数如何在 C 中工作的困惑【英文标题】:Confusion about how the sprintf function works in C 【发布时间】:2013-09-17 01:24:45 【问题描述】:

我很困惑,因为我认为 sprintf 函数返回了一个字符串,并且它在 cplusplus.com 上显示它返回一个 int?为什么?

基本上,我在以下行中遇到问题,我试图同时填充一些间距并格式化字符串:

printf("%30s", sprintf("1.10f", modeTimeTotal/num_tests));

我得到的错误是:

cannot convert 'double' to 'const char*' for argument '2' to 'int sprintf(char*, const char*, ...)'

【问题讨论】:

查看这篇文章:***.com/questions/4627330/… “” 为什么要使用C++ 标签? @Manu343726:重新标记 【参考方案1】:

sprintf 打印 into 字符串并返回如此打印的字符数。 sprintf 调用的第一个参数应该是要打印到的字符串:

char buffer[30];
int n = sprintf(buffer, "%1.10f", modeTimeTotal/num_tests);
printf("Printed %d characters.  String is '%s'\n", n, buffer);

您收到警告是因为您试图将modeTimeTotal/num_tests 硬塞到sprintf 的格式字符串参数中。

【讨论】:

【参考方案2】:

sprintf() 返回打印的字符数(不包括 NUL 终止符字节)。

你应该这样使用它:

char buf[512];
sprintf(buf, "%30s%1.10f", "", modeTimeTotal/num_tests);
printf("%s\n", buf);

【讨论】:

sprintf "返回值 成功时,返回写入的字符总数。此计数不包括自动附加在字符串末尾的额外空字符。失败时,一个负数返回数字。”

以上是关于关于 sprintf 函数如何在 C 中工作的困惑的主要内容,如果未能解决你的问题,请参考以下文章

关于库如何在 C 中工作的问题

关于管道如何在 Bash 中工作的简单解释是啥?

关于使按钮在 Netbeans 的 GUI 编辑器中工作的 JDBC 到 JTable 输出查询

获取在 Qt5 中工作的 opencv_gpu 函数

$ 究竟是如何在 NASM 中工作的?

在 gcc4x 中工作的复杂函数在 gcc8x 中不起作用