在C中将int转换为char

#include char* intToString(int N); int power(int N, int M) { int n = N; if (M ==0) return 1; int i; for( i = 1; i  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”。

在你的代码中,

  char str[numberLen + 1]; 

str是函数intToString本地。

如果您尝试返回指向此数组的指针并尝试使用调用程序函数中的返回值,它将调用未定义的行为,因为当函数完成执行时,数组将停止存在并且返回的指针呈现无效。 尝试使用无效内存调用UB。

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

除了另一个答案建议的解决方案之外,您可以将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; }