此代码的目的是将整数转换为字符数组 以下代码导致垃圾输出。但这似乎是正确的。有什么建议吗?
#include<stdio.h>
#include<stdlib.h>
char* intToChar(int product);
int main()
{
printf("%s\n", intToChar(213));
return 0;
}
char* intToChar(int product)
{
int temp = product;
int c = 0;
char* morphed;
while(temp)
{
temp /= 10;
c++;
}
/printf("c : %d\n", c);//db
morphed = malloc(sizeof(char) * c);
temp = product;
// printf("temp : %d\n", temp);//db
c -= 1;
while(temp)
{
morphed[c] = (char)temp % 10;
//printf("c[] %c\n", morphed[c]);//db
c -= 1;
temp /= 10;
}
return morphed;
}
答案 0 :(得分:1)
首先考虑到0是一个有效的整数,也应该转换为字符串。
类型-c
的对象也可能是否定的。
您需要将数字的每个数字转换为其字符表示。
结果字符串应附加终止零。
该功能可以看起来如下面的示范程序所示
int
它的输出是
#include <stdio.h>
#include <stdlib.h>
char * intToChar( int product )
{
const int Base = 10;
int temp = product;
int n = 0;
char* morphed;
do { ++n; } while ( temp /= Base );
if ( product < 0 ) ++n;
morphed = malloc( ( n + 1 ) * sizeof( char ) );
morphed[n--] = '\0';
temp = product;
do { morphed[n--] = '0' + abs( temp % Base ); } while ( temp /= Base );
if ( product < 0 ) morphed[n] = '-';
return morphed;
}
int main( void )
{
char *p;
p = intToChar( 0 );
puts( p );
free( p );
p = intToChar( 123 );
puts( p );
free( p );
p = intToChar( -123 );
puts( p );
free( p );
return 0;
}
答案 1 :(得分:0)
我看到你基本上想要将整数转换为字符数组或字符串。我没有看到你创建自己的函数的原因。您可以使用sprintf
:
int a = 213;
char str [20];
sprintf (str, "%d", a);
您也可以使用更安全的snprintf
。
作为@FUZxxi,为输出中的每个数字添加零将起作用。
答案 2 :(得分:0)
以下修订
morphed = malloc(sizeof(char) * (1+c) ); /* leave room for a '\0' at end */
memset( morphed, 0, sizeof(char) *(1+c) ); /* set to 0.*/
以后
morphed[c] = (char)temp % 10 + '0';
这增加了ascii&#39; 0&#39;您计算的每个数字的值
the digit '0' is ascii 48
the digit '1' is ascii 49
...
the digit '9' is ascii 57
对于其他字符集......
char digits[] = "01234567890";
...
morphed[c] = digits[ temp % 10];