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

时间:2013-09-12 15:07:40

标签: c

我很困惑因为我认为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*, ...)'

2 个答案:

答案 0 :(得分:5)

sprintf打印到字符串中,返回如此打印的字符数。 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的格式字符串参数中。

答案 1 :(得分:0)

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

您应该像这样使用它:

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