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

在C中的子例程中将浮点转换为字符串,c,floating-point,char,subroutine,C,Floating Point,Char,Subroutine,我试图用c语言编写一个程序,其中我使用一个子程序来处理子程序中的一些变量,并将它们作为数组返回。例如,我有数字2.5和3.5,子例程将这些数字乘以某个值,然后将它们作为包含这两个值的字符串返回 下面是我正在尝试使用的程序: #include <stdio.h> #include <dirent.h> #include <string.h> #include <math.h> #include <stdlib.h> char test_

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

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

#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);

}

如何解决此问题?

您试图使用
sprintf
将数据写入
char
。按照编译器的建议,查看
sprintf
函数的声明:

int sprintf(char*, const char*, ...)
它将
char*
作为第一个参数,即:指向缓冲区的指针,缓冲区中存储生成的格式化字符串

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


您正试图使用
sprintf
将数据写入
char
。按照编译器的建议,查看
sprintf
函数的声明:

int sprintf(char*, const char*, ...)
它将
char*
作为第一个参数,即:指向缓冲区的指针,缓冲区中存储生成的格式化字符串

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


如果将
var
声明为type
char
,则它只能包含一个字符。但是您需要一个多字符字符串。如果将
var
声明为type
char
,则它只能包含一个字符。但是您需要一个多字符字符串。我尝试了这个方法,但得到了错误:testrun.c:在函数'char*test_子例程(float,float)':testrun.c:15:27:错误:从'void*'到'char*'的转换无效[-fppermissive]char*var=malloc(100);//分配一个需要的缓冲区。@ JMS1980,这意味着你使用的是C++编译器,而不是C编译器。谢谢。使用<代码> GCC < /代码>,而不是<代码> G++<代码>或任何其他C++编译器。您正在编写C,而不是C++。我尝试了这个错误,但是Tetruun。C:在函数'char *TestEnSubOutTin(浮点,浮点)':TESTRUN。C:15:27:错误:无效转换从“Valu*”到“char *”[fPrime] Car *var=Maloc(100);分配一个需要的缓冲区。@ JMS1980,这意味着你使用的是C++编译器,而不是C编译器。谢谢。使用<代码> GCC < /代码>,而不是<代码> G++<代码>或任何其他C++编译器。你在写C,而不是C++。