-3

私は次の方法でintを出力しようとしています:

void the_int(int i)
{
     int lenghtOfInt = 0;
     int tempValue = i;
     while(tempValue >= 1)
     {
          tempValue/=10;
          lenghtOfInt++;
     }

     int currentDigit;
     char string[lengthOfInt];
     while(i>9)
     {
           currentDigit= i % 10;
           i = i/10;
           char ch = (char)(((int)'0')+currentDigit);

           string[lengthOfInt--] = ch;
     }
     string[lengthOfInt]= (char)(((int)'0')+i);
     function(str); //prints the string character by character
}

この関数をi=12で試してみると、à12çが得られます。私は何が間違っているのですか?

4

4 に答える 4

3

21世紀に参加し、を使用しstd::stringます。

于 2013-01-27T04:01:24.257 に答える
1

次の行で、配列の境界を超えてアクセスしています。

string[lengthOfInt--] = ch;

lengthofIntこれは、正しくないインデックスにアクセスしようとします。

ここで、変数を使用した配列宣言を無視すると、

char string[lengthOfInt];

0からまでのインデックスを持つ配列を宣言しますlengthofInt - 1

また、文字列の印刷方法によっては、最後に「\0」文字が必要になる場合があります。ただし、文字ごとに進み、自分の限界を確信している場合は、それは必要ありませんが、それでもお勧めします。

于 2013-01-27T03:58:16.820 に答える
1

Cのすべての文字列は、ヌルバイト(0)で終わる必要があります。したがって、最初にスタックに割り当てるchar配列の長さに1を追加し、次に印刷する前に文字列にnulバイトを追加します。

これは宿題だと思います。それ以外の場合は、itoa関数を使用する必要があります。

于 2013-01-27T03:59:06.437 に答える
1

変数を使用して配列を宣言しているという事実を無視すると(動的割り当てまたは少なくとも定数を使用する必要があります)、char string[lengthOfInt];whileループの前に行うchar string[lengthOfInt+1];必要があります。string[lengthOfInt] = '\0';C文字列はNULLで終了します。

さらに、なぜだけではないのprintf("%d", i);ですか?

于 2013-01-27T03:59:35.403 に答える