所以我写了一个简单的c代码,它将一个数字转换成一个字符串,有一件事我不清楚。在这段代码上:
void itos(int a,char *p){
int pom = a;
do{
p++;
pom/=10;
}while(pom);
*p = '\0';
do{
pom = a%10 + '0';
*--p = pom;
a/=10;
}while(a);
}
我一直在分段错误,我不明白为什么。字符串是通过地址传递的,所以主要的字符串是否应该在函数中具有字符串?另一方面,这段代码很有效:
char *itos(int a,char *p){
int pom = a;
do{
p++;
pom/=10;
}while(pom);
*p = '\0';
do{
pom = a%10 + '0';
*--p = pom;
a/=10;
}while(a);
return p;
}
如果somone可以解释我的差异(特别是为什么第一个不起作用)我会非常精彩。
答案 0 :(得分:0)
这两个函数只有返回值不同,一个返回指针p
,另一个不返回任何内容。因此,请确保传入的指针初始化为有效地址,即指向缓冲区:
char str[100];
itos(a, str);
或
char *str = malloc(100);
itos(a, str);
要将整数转换为字符串,您只需打印它:
char str[100];
int n;
snprintf(str, sizeof str, "%d", n);