运行 数字转换器程序时出现分段错误
segmentation fault when running number converter program
我编写了以下程序,用于将十进制数转换为小于或等于 16 的任何其他基数。
我一直遇到分段错误。我无法弄清楚我的错误。请帮我解决这个问题。
程序:
#include<stdio.h>
#include<string.h>
void reverse(char s[]){
int c,i,j;
for (i=0,j=strlen(s)-1;i<j;i++,j++){
c= s[i];
s[i]=s[j];
s[j]=c;
}
}
void itob(int n, int b){
int i=0,index;
char s[50];
char s2[17]="0123456789ABCDEF";
index = n % b ;
do {
s[i++]=s2[index];
} while((n/=b)>0);
s[i]='[=11=]';
reverse(s);
printf("%s\n",s);
}
int main (void){
int n,b;
char s[50];
printf("enter the number");
scanf("%d",&n);
printf("enter the base");
scanf("%d",&b);
itob(n,b);
return 0;
}
这个:
for (i=0,j=strlen(s)-1;i<j;i++,j++){
c= s[i];
s[i]=s[j];
s[j]=c;
}
是一个无限循环。你可能想要:
for (i = 0, j = strlen(s) - 1; i < j; i++, j--){ /* j-- instead of j++ */
c = s[i];
s[i] = s[j];
s[j] = c;
}
你有一个逻辑错误。这个
index = n % b ;
do {
s[i++]=s2[index];
} while((n/=b)>0);
应该是
do {
index = n % b;
s[i++] = s2[index];
} while((n /= b) > 0);
我编写了以下程序,用于将十进制数转换为小于或等于 16 的任何其他基数。
我一直遇到分段错误。我无法弄清楚我的错误。请帮我解决这个问题。
程序:
#include<stdio.h>
#include<string.h>
void reverse(char s[]){
int c,i,j;
for (i=0,j=strlen(s)-1;i<j;i++,j++){
c= s[i];
s[i]=s[j];
s[j]=c;
}
}
void itob(int n, int b){
int i=0,index;
char s[50];
char s2[17]="0123456789ABCDEF";
index = n % b ;
do {
s[i++]=s2[index];
} while((n/=b)>0);
s[i]='[=11=]';
reverse(s);
printf("%s\n",s);
}
int main (void){
int n,b;
char s[50];
printf("enter the number");
scanf("%d",&n);
printf("enter the base");
scanf("%d",&b);
itob(n,b);
return 0;
}
这个:
for (i=0,j=strlen(s)-1;i<j;i++,j++){
c= s[i];
s[i]=s[j];
s[j]=c;
}
是一个无限循环。你可能想要:
for (i = 0, j = strlen(s) - 1; i < j; i++, j--){ /* j-- instead of j++ */
c = s[i];
s[i] = s[j];
s[j] = c;
}
你有一个逻辑错误。这个
index = n % b ;
do {
s[i++]=s2[index];
} while((n/=b)>0);
应该是
do {
index = n % b;
s[i++] = s2[index];
} while((n /= b) > 0);