c从整数到字符串函数

时间:2018-04-11 04:20:15

标签: c segmentation-fault

void to_string(int x)
{
    int value, i = 0;
    char numericalChar[] = "0123456789";
    char *string;
    do
    {
        value = x % 10;
        string[i++] = numericalChar[value];
        x /= 10;
    } while(x >= 0);
    printf("%s\n", string);
}

我正在尝试编写一个将整数转换为字符串的函数。我不认为我的逻辑没有任何东西,但我得到了一个段错误,我的printf()没有打印任何东西。我可能遗漏了一些明显的东我一直坐在电脑前一个小时,但我仍然无法理解。提前谢谢。

3 个答案:

答案 0 :(得分:3)

我想你知道事实上有标准功能(例如sprintf - 见下面的例子),但只是想自己写,对吧......

在那种情况下:

首先,您需要分配内存来保存字符串。使用char指针是不够的。因此,你会遇到一个段错误。一个未初始化的指针只指向某个位置(你很可能)不允许写入的内存。所以什么时候......它会出错。在这种情况下,只需使用一个短的固定大小的char数组。

其次,将每个数字添加到char '0'以获得正确的数字要容易得多。不需要数组作为查找表。

类似的东西:

void to_string(int x)
{
    char string[32] = "0";
    if (x > 0)
    {
            char temp[32] = {0};
            int i = 31;

            // Build a temp string from from the end (right to left)
            while(x > 0)
            {
                temp[--i] = '0' + (x % 10);
                x /= 10;
            }

            // Copy the temp string to the target variable
            strcpy(string, &temp[i]);
    }

    printf("%s\n", string);
}

请注意,此代码仅处理大于或等于零的整数。我会把负整数作为练习。

如果您想使用例如sprintf它就像以下一样简单:

int n = 42;
char string[32];
sprintf(string, "%d", n);
printf("%s\n", string);

答案 1 :(得分:1)

因此,当人们已经对您的问题发表评论时,您没有分配空间:

char *string = malloc ( sizeof (char) * numberOfDigits);

应该是

clblas_git.bb

并且还有另一个我无法弄清楚的故障,当我修复它时我会给你这个:

itoa solutions

答案 2 :(得分:-2)

void to_string(int x) {
   string s = "";
   while(x){
       s += (x % 10) + 48;
       x /= 10;
   }
   printf("%s\n", s);
}
相关问题