-1

私は以下を機能させることができません:

char* int_toChar ( int num ) {
    char* str = "0";
    if ( num != 0 ) {
        char* prefix = "";
        char* chars = " 123456789";
        int id = 0;
        for ( int i = 0; i < num; ++i ) {
            str = prefix + chars[id];
            if ( id == 9 ) {
                id = 0;
                //prefix = (char*)("") + chars[id];
            } else {
                ++id;
            }
        }
    }
    return str;
}

この関数は、cout ではなく printf_s を使用するために作成しましたが、int を char* に変換する関数が必要で、printf_s 以外の関数で使用できます。

4

3 に答える 3

1

これは可能な限りいい意味で言ったのですが、この関数には多くの問題があり、どこから始めればよいかわかりません: -入力の num をループしています。関数に 2000000000 という数値を指定するとどうなるか見たくありません。 -char* は文字の配列ではありません。ポインターです。この関数が戻った後、 str が指すメモリはあなたのものではなくなるため、値のように返すことはできません。-8行目で、文字へのポインターを追加しています

このようなものを本当に動かしたいのであれば、C 言語、ポインター、および C が文字列を処理する方法について少し学ぶ必要があるように思えます。sprintf(str, "%i", num); を使用するだけです。あなたがcoutを避けたいのであれば、今のところ。

于 2012-05-05T01:10:08.740 に答える
1

あなたの問題はここから始まります:

 char* str = "0";

文字列リテラルは書き込み可能なメモリではありません。

その後は悪化するだけです。

なぜ使用しないのitoaですか?

于 2012-05-05T01:13:13.167 に答える
0

変換された int を静的または動的に配置するためのメモリを割り当てる必要があります。静的バッファーを割り当てる場合は、変換された int をそれに書き込み、投稿された関数へのインターフェイスが示すようにポインターを返すことができますが、返される char* 文字列には、その数値が含まれ続けるだけです。次に関数を呼び出したとき。あるいは、変換された int の文字を入れるバッファーを動的に割り当てることができます (malloc() または new のいずれかを使用)。関数の呼び出し元は、割り当てられたバッファーを後で free() するか削除するか、またはそれ以外の場合に責任を負います。メモリリークが発生します。関数が固定数の文字列を作成するために限られた回数しか使用されないことが前もってわかっている場合は、特に、プログラムの存続期間中に存在する必要があるものは、必ずしもそれらを解放/削除する必要はありません。どのような方法で割り当てても、おそらく int のサイズに基づいて、作成する必要がある最大の数値文字列に十分なスペースを割り当てるようにしてください (正または負の 32 ビット整数値を表すには 12 文字で十分です)。

メモリ バッファを割り当てたら、デコードされた int 値を書き込む必要があります。コードに表示されない / および % (除算および mod) 演算子の使用を確実に含む独自のカスタム ロール ループでそれを行うことができます。または、できれば、既に利用可能な標準ライブラリ関数を使用して実行します。それはあなたのためです。1 つの方法は、sprintf(myBuffer, "%d", num) を使用することです。

于 2012-05-05T01:20:09.437 に答える