首先为提出这个愚蠢的问题道歉:
如何在 c (GNU C) 中调用此函数
char *ftoa(float f, char *buf, int places)
这就是你所说的:
int decimal_places = 10;
char* result = malloc(decimal_places + 1);
ftoa(SOME_FLOAT_VALUE, result, decimal_places);
该函数返回其buf
参数。与往常一样,完成后不要忘记 free()result
字符串。
我更喜欢:
#define DECIMALS 10
char result[DECIMALS+1];
ftoa(SOME_FLOAT_VALUE, result, decimal_places);
我也建议使用 sprintf 以获得更大的灵活性。
我更喜欢静态分配的原因是这会占用更少的空间,当你离开函数时它会自动取消分配[如果这不是你想要的,显然,你可能需要 malloc,但在小变量的堆栈分配上,并且11字节很小!,应该是首选方式。我看到太多的代码分配毫无意义——它浪费了内存,并添加了额外的代码。[从堆中分配 11 个字节的开销可能超过 11 个字节,因为它必须四舍五入到 12 个字节,然后是一个“标题”来说明分配,在许多系统中是 16 或 32 个字节,在某些情况下 12 个字节]
我认为 C 的 GNU 实现没有预定义的函数 ftoa()
您可以使用 sprintf() 如下:
float f;
char *a = (char *)malloc(10*sizeof(char)); //assuming you need 10 characters to store f
sprintf(a, "%f", f);
如果您只想有特定的小数位数,您可以使用“%0.2f”(小数点后两位数)等代替“%f”
sprintf() 可以代替 itoa() 函数派上用场。例如:
char *a = (char *)malloc(10*sizeof(char);
int x = 10;
float f = 12.4;
sprintf(a, "%d", x); //=itoa() function
sprintf(a, "%f", f);
祝你好运!