首先为这个愚蠢的问题道歉:
如何在c(GNU C)中调用此函数
char *ftoa(float f, char *buf, int places)
答案 0 :(得分:3)
这就是你所说的:
int decimal_places = 10;
char* result = malloc(decimal_places + 1);
ftoa(SOME_FLOAT_VALUE, result, decimal_places);
该函数返回其buf
参数。与往常一样,当你完成它时,不要忘记释放{} result
字符串。
答案 1 :(得分:0)
我更喜欢:
#define DECIMALS 10
char result[DECIMALS+1];
ftoa(SOME_FLOAT_VALUE, result, decimal_places);
我也建议使用sprintf以获得更大的灵活性。
我更喜欢静态分配的原因是这会占用更少的空间,当你离开函数时会自动解除分配[如果这不是你想要的,显然,你可能需要malloc,但是在小的堆栈分配上变量,11个字节很小!,应该是首选方式。我看到太多的代码没有无意义的分配 - 它浪费了内存,并增加了额外的代码。 [从堆中分配11个字节的开销可能超过11个字节,因为它必须四舍五入到12个字节,然后是一个'标题'来解释分配,在许多系统中是16或32个字节,有些情况下12字节]
答案 2 :(得分:0)
我认为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);
祝你好运!