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()没有打印任何东西。我可能遗漏了一些明显的东我一直坐在电脑前一个小时,但我仍然无法理解。提前谢谢。
答案 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
并且还有另一个我无法弄清楚的故障,当我修复它时我会给你这个:
答案 2 :(得分:-2)
void to_string(int x) {
string s = "";
while(x){
s += (x % 10) + 48;
x /= 10;
}
printf("%s\n", s);
}