运行 数字转换器程序时出现分段错误

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