c 从整数到字符串函数


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("%sn", string);
}

我正在尝试编写一个将整数转换为字符串的函数。我不认为我的逻辑没有任何内容,但我得到了一个段错误,我的 printf(( 没有打印出任何东西。我可能错过了一些明显的东西。我已经在电脑前坐了一个小时,但仍然想不通。提前谢谢。

我想

你知道这实际上有标准功能(例如 sprintf - 见下面的示例(,但只想自己写,对吧......

在这种情况下:

首先,您需要分配内存来保存字符串。使用字符指针是不够的。因此,您会遇到赛格故障。未初始化的指针只是指向内存中您(很可能(不允许写入的某个地方。那么什么时候...它赛格错误。在这种情况下,只需使用一个简短的固定大小的字符数组。

其次,将每个数字添加到字符'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("%sn", string);
}

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

如果您想使用例如 sprintf它就像:

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

因此,正如人们已经对您的问题发表评论的那样,您没有分配空间,因此:

char *string;

应该是

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

还有一个我无法弄清楚的 seg 错误,当我修复它时,我会给你这个:

伊托亚解决方案

void to_string(int x) {
   string s = "";
   while(x){
       s += (x % 10) + 48;
       x /= 10;
   }
   printf("%sn", s);
}

相关内容

  • 没有找到相关文章

最新更新