在 C 的子例程中将浮点数转换为字符串

Converting a float to string in a subroutine in C

我正在尝试用 c 编写一个程序,我在其中使用子例程来处理子例程中的一些变量,并将它们 return 作为数组。例如,我有数字 2.5 和 3.5,子例程将这些数字乘以某个值,然后 return 将它们作为包含这两个值的字符串。

下面是我正在尝试使用的程序:

#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

char test_subroutine(float x,float y)
{
    float a=105.252342562324;
    float b=108.252234256262;
    float d;
    float e;
    char var;

    d=x*a;
    e=y*b;

    sprintf(var,"%0.2f %0.2f",d,e);

    return var;
}



int main()
{
    char variable;
    variable=test_subroutine(2.5,3.5);

}

尝试编译时出现以下错误:

testrun.c: In function ‘char test_subroutine(float, float)’:
testrun.c:21:31: error: invalid conversion from ‘char’ to ‘char*’    [-fpermissive]
sprintf(var,"%0.2f %0.2f",d,e);
                           ^
In file included from testrun.c:1:0:
/usr/include/stdio.h:364:12: error:   initializing argument 1 of ‘int sprintf(char*, const char*, ...)’ [-fpermissive]
extern int sprintf (char *__restrict __s,

如何解决这个问题?

您正在尝试使用 sprintf 将数据写入 char。查看 sprintf 函数的声明,正如您的编译器建议的那样:

int sprintf(char*, const char*, ...)

它接受一个 char* 作为第一个参数,即:指向缓冲区的指针,用于存储生成的格式化字符串。

你应该这样使用它(请注意我所做的所有更改):

// Return the allocated buffer, which is char*, not char.
char *test_subroutine(float x,float y)
{
    float a=105.252342562324;
    float b=108.252234256262;
    float d;
    float e;

    char *var = malloc(100); // Allocate a buffer of the needed size.

    d=x*a;
    e=y*b;

    sprintf(var,"%0.2f %0.2f",d,e); // Sprintf to that buffer

    return var;
}



int main()
{
    char *variable;
    variable = test_subroutine(2.5,3.5);
    free(variable); // Free the buffer allocated by test_subroutine()
}