コードがコンパイルされています。私が実行すると、私はちょうどメッセージ(セグメンテーションフォールト(コアダンプ))を取得します。どんな助けでも大歓迎です!セグメンテーションフォルト(コアダンプ) - Cセグメンテーションフォルトに関する問題がなくなりました。今私はデバッグすることができます。ありがとう
プログラムは、入力された引数の基数を変更することになっています。 10 出力ベース:入力ベースで2つの 引数:10 2 5 6 7 入力ベース./convert例えば5 6 7
私はちょうど...あなたが提供できるすべてのヘルプをCを学ぶために始めているだろう素晴らしいよ! ありがとう!
編集済み:セグメンテーションフォルトに問題はありません。ありがとうございました。 * toStrongに逆
#include <stdio.h>
#include <string.h>
int makeInt(char digits[]) {
int num = 0;
int i = 0;
while (digits[i] != '\0') {
num = num * 10 + (digits[i] - '0');
i++;
}
return num;
}
//converts from original base to base 10
int makeBase10(char digits[],int a) {
int num = 0;
int pow = 1;
int i = 0;
int x = 0;
int length = strlen(digits);
char k;
for (i = length -1; i > -1; i--){
k = digits[i];
if(k <= '9' && k >= '0'){
x = (int)k - '0';
}
else{
x = (int)k - 'a' + 10;
}
num = num + (x*pow);
pow = pow * a;
}
return num;
}
//changes number from base 10 to knew base
// and returns as string
char * toString(char str[], int num, int b) {
int i = 0;
char x;
int mod = 0;
while(0 < num){
mod = num % b;
if(mod < 10 && mod > -1){
x = (char)(num + '0');
}
else{
x = (char)(num - 10 + 'a');
}
str[i] =(int) x;
num = num/b;
}
str[i] = '\0';
int length = i + 1;
int j = 0;
char *reverse;
for(i = length -2; i >= 0; i--){
reverse[i] = str[j];
j++;
}
reverse[length-1] = '\0';
return reverse;
}
int main(int argc, char *argv[]) {
int i;
int num;
int a;
int b;
char str[33]; //binary could be up to 32 + '\0'
a = makeInt(argv[0]); //input base
b = makeInt(argv[1]);; //output base
printf("make int worked and input works");
num = 0;
i = 2;
while (i < argc) {
num = makeBase10(argv[i], a);
printf("%s\n", toString(str, num, b));
i++;
}
}
デバッグはどうですか?いくつかのプリントを追加して、プログラムがクラッシュするまでの距離を調べます。どんなビットクラッシュが起きているのかを把握し、問題を把握することができます。 – John3136
私は逆のポインタもよく見ています。 – nfproductions
私はmainの最初の行にprintfステートメントを置くことはできません。このコードをどのようにフォーマットしたのかは間違いでなければなりません...正直なところ私はこの言語に慣れていません。どのように進めるかを確かめる。 – Graham