我如何调用此功能c

时间:2012-12-22 08:42:30

标签: c gnu

首先为这个愚蠢的问题道歉:

如何在c(GNU C)中调用此函数

char *ftoa(float f, char *buf, int places)

3 个答案:

答案 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);
祝你好运!