关于 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 中工作的困惑的主要内容,如果未能解决你的问题,请参考以下文章