在C中将int转换为char

时间:2016-07-01 19:12:21

标签: c arrays string return-value

#include<stdio.h>

char* intToString(int N);
int power(int N, int M)
{   
    int n = N;
    if (M ==0) return 1;
    int i;
    for( i = 1; i < M; i++)
        N*=n;
    return N;
}

int main()
{
   printf("%s",intToString(100));
}

char* intToString(int N)
{   
   float M = N;
   int numberLen = 1;
   while(M > 1) 
   { 
      M /= 10;numberLen++;
   }
   int ar[numberLen];
   char str[numberLen + 1];
   int i;
   for(i = 0; i < numberLen; i++)
   {
      str[numberLen - i - 1] = (N%power(10,i+1))/(power(10,i));
   }
   str[numberLen] = '\0';
   return str; 
}

我正在尝试解决C中的Euler项目问题​​。我在这里遇到了一个小问题,当我运行这个程序时,我得到一个带有一些数字的正方形,而不是字符串“100”。

2 个答案:

答案 0 :(得分:3)

在您的代码中,

 char str[numberLen + 1];

str是您的函数intToString的本地。

如果您尝试返回指向此数组的指针并尝试使用调用函数中的返回值,它将调用undefined behavior,因为当函数完成执行时,数组将不再存在并返回指针呈现无效。尝试使用无效内存调用UB。

您可以使str成为指针并使用动态内存分配函数(如malloc()或family)为其分配内存。在这种情况下,即使函数完成执行,分配的内存的生命周期仍然有效,直到free() - d显式并且使用返回值不是错误。

答案 1 :(得分:0)

the other answer建议的解决方案外,您还可以将char的数组从main传递到intToString。这将避免使用动态内存分配的需要。

char* intToString(int N, char* buffer);

...

int main()
{
   char buffer[20]; // Make it large enough for your need.
   printf("%s",intToString(100, buffer));
}

char* intToString(int N, char* buffer)
{
   // Replace use of str by buffer

   ...

   return buffer;
}