-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声明一个具有索引 from to的数组lengthofInt - 1

此外,根据您打印字符串的方式,最后可能需要一个 '\0' 字符。虽然,如果您逐个字符地进行并且确定自己的界限,那么它不是必需的,但仍然推荐。

于 2013-01-27T03:58:16.820 回答
1

C 中的所有字符串都必须以空字节 (0) 结尾。因此,首先将 1 添加到您在堆栈上分配的 char 数组的长度,然后在打印之前将 nul 字节添加到字符串中。

我认为这是一项家庭作业。否则,您应该只使用该itoa功能。

于 2013-01-27T03:59:06.437 回答
1

忽略您使用变量声明数组(您应该使用动态分配或至少使用常量)这一事实,char string[lengthOfInt];需要char string[lengthOfInt+1];并且您需要string[lengthOfInt] = '\0';在 while 循环之前。C 字符串以 NULL 结尾。

此外,为什么不只是printf("%d", i);

于 2013-01-27T03:59:35.403 回答