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