在 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()
}
我正在尝试用 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()
}