在C中将int转换为char
Converting an int to a char in C
#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] = '[=10=]';
return str;
}
我正在尝试解决 C 中的 Euler 项目问题。我 运行 遇到了一个小问题,当我 运行 这个程序时,我得到一个正方形,里面有一些数字作为反对到字符串“100”。
在您的代码中,
char str[numberLen + 1];
str
是函数 intToString
的局部变量。
如果您尝试 return 指向此数组的指针并尝试在调用函数中使用 return 值,它将在函数完成时调用 undefined behavior执行时,数组不复存在并且 returned 指针呈现无效。尝试使用无效内存调用 UB。
您可以使 str
成为一个指针并显式使用 malloc()
or family to allocate memory to that. In that case, even if the function finishes execution, the lifetime of the allocated memory remains valid until free()
-d 等动态内存分配函数,并且使用 return 值不是错误。
除了 建议的解决方案外,您还可以将 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;
}
#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] = '[=10=]';
return str;
}
我正在尝试解决 C 中的 Euler 项目问题。我 运行 遇到了一个小问题,当我 运行 这个程序时,我得到一个正方形,里面有一些数字作为反对到字符串“100”。
在您的代码中,
char str[numberLen + 1];
str
是函数 intToString
的局部变量。
如果您尝试 return 指向此数组的指针并尝试在调用函数中使用 return 值,它将在函数完成时调用 undefined behavior执行时,数组不复存在并且 returned 指针呈现无效。尝试使用无效内存调用 UB。
您可以使 str
成为一个指针并显式使用 malloc()
or family to allocate memory to that. In that case, even if the function finishes execution, the lifetime of the allocated memory remains valid until free()
-d 等动态内存分配函数,并且使用 return 值不是错误。
除了 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;
}