0

最初に、このばかげた質問をしたことをお詫びします。

この関数をcで呼び出す方法(GNU C)

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

3 に答える 3

3

これはあなたがそれを呼ぶ方法です:

int decimal_places = 10;
char* result = malloc(decimal_places + 1);
ftoa(SOME_FLOAT_VALUE, result, decimal_places);

関数はbuf引数を返します。いつものように、文字列を使い終わったら、文字列をfree()することを忘れないでくださいresult

于 2012-12-22T08:54:22.340 に答える
0

私が好む:

#define DECIMALS 10
char result[DECIMALS+1];
ftoa(SOME_FLOAT_VALUE, result, decimal_places);

私も、柔軟性を高めるためにsprintfを使用することをお勧めします。

私が静的割り当てを好む理由は、これが占めるスペースが少なくなるためです。関数を終了すると、自動的に割り当てが解除されます[それが必要でない場合は、明らかに、mallocが必要になる可能性がありますが、小さな変数のスタック割り当てでは、 11バイトは小さいです!、推奨される方法です。意味のない割り当てでWAYが多すぎるコードが表示されます。これはメモリを無駄にし、余分なコードを追加します。[ヒープから11バイトを割り当てるオーバーヘッドは、おそらく11バイトを超えます。これは、12バイトに丸める必要があるためです。次に、割り当てを説明するための「ヘッダー」(多くのシステムでは16バイトまたは32バイト)場合によっては12バイト]

于 2012-12-22T12:02:52.233 に答える
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);

小数点以下の桁数を特定したい場合は、「%f」の代わりに「%0.2f」(小数点以下2桁)などを使用できます。

itoa()関数の代わりにsprintf()が便利な場合があります。例えば:

char *a = (char *)malloc(10*sizeof(char);
int x = 10;
float f = 12.4;
sprintf(a, "%d", x);  //=itoa() function
sprintf(a, "%f", f);

幸運を!

于 2012-12-22T13:15:23.973 に答える