0

これは非常に奇妙です。itoa();無限ループを作っているようです。

for(int i = 0; i < 10; i++)
{
        char buffer[1];
        itoa(i, buffer, 10);
        std::cout << buffer;
}

なぜそれをするのですか?i変数なしの数値 (つまり)以外の変数を使用してみましたがitoa(1, buffer, 10);、それでも無限ループに陥り続けます。私はあまり成功せずにグーグルを試みました.私はそれについての古いメールを見つけましたここ. Windows XP 32 ビットと Code::Blocks (GCC を使用) をコンパイラとして使用しています。

誰が何が悪いのか知っていますか?前もって感謝します。

4

3 に答える 3

5

itoabuffer生成する文字列を null で終了しますが、終端の NUL 文字を保持するのに十分な大きさにしていません。試す:

for (int i = 0; i < 10; i++)
{
    char buffer[2];
    itoa(i, buffer, 10);
    std::cout << buffer;
}
于 2011-10-25T21:51:18.120 に答える
1

いったいなぜ、1 桁の一般的な数値変換ルーチンを使用しているのですか?

for (int i = 0; i < 10; i++)
    std::cout << char('0' + i);

char(コンパイラが の正しいオーバーロードを使用するには、 にキャスト バックする必要があります<<。C++ 標準では、文字定数'0''9'が連続した数値を持つことが保証されています。)

于 2011-10-25T22:30:43.650 に答える
0

バッファが小さすぎます。itoa は null で終わる文字列を書き込むため、0 ~ 9 の値を保持するにはバッファに最低 2 バイトが必要です。

于 2011-10-25T21:52:23.620 に答える