将整数转换为字符数组,即123 => '123'

时间:2016-02-28 11:44:39

标签: c casting malloc

此代码的目的是将整数转换为字符数组 以下代码导致垃圾输出。但这似乎是正确的。有什么建议吗?

#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;
}

3 个答案:

答案 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];