コードでバス エラーが発生しています。このコードを使用して数字を単語に変換しようとしていますが、ロジックに欠陥があることがわかっています。しかし、その前に、Macで g++ を使用してこのコードをコンパイルして実行すると、このコードをそのまま実行しようとすると、バス エラーが発生します。どんな助けでも大歓迎です。
コードを実行すると、次の出力が得られます。エラーが発生した場所を追跡するためのデバッグ メッセージがあります。
数字を入力してください:1234 メイン 1:数字は:234 Function1: 数は 234 2 200 34Function2: 数は 34 Function3: 数は 34 バス エラー: 10
#include <iostream>
#include <string>
using namespace std;
char *convert_number(int);
char *tens[] = {"", "ten", "twenty", "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety"};
char *words[] = {"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine",
"ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "ninteen"};
char *place[] = {"", "hundred", "thouands", "million", "billion", "trillion"};
int main(int argc, char **argv)
{
int number, conv_num, places;
places = 1;
char *string = new char[1000];
char *temp_string = new char[100];
cout << "Enter a number:";
cin >> number;
string = " ";
if (number >= 1000)
{
while(number >= 1)
{
conv_num = number % 1000;
cout << "main 1:numbers are:" << conv_num << endl;
temp_string = convert_number(conv_num);
string =strcat(string, temp_string);
string =strcat(string, " ");
number = 0; // (number-conv_num)/1000;
cout << "main 2:numbers are:" << endl;
//cout << conv_num << ":" << number << endl;
}
}
else
{
string = convert_number(number);
string = strcat(string, " ");
}
cout<<"Main: The word is :"<<string<<endl;
}
char *convert_number(int number)
{
int divisor;
char *word;
word = new char[100];
divisor = 10;
cout << "Function1: Number is " << number << endl;
if (number >= 100)
{
word = strcat(word, words[number/100]);
cout << word << endl;
word = strcat(word, " hundred ");
cout << word << endl;
number = number%100;
cout << number;
}
cout << "Function2: Number is " << number << endl;
if (number >= 20)
{
word = strcat(word, tens[number/10]);
word = strcat(word, " ");
if (number%divisor >= 1)
{
word=strcat(word, words[number%divisor]);
word =strcat(word, " ");
}
}
cout << "Function3: Number is " << number << endl;
if (number < 20)
{
word = strcat(word, words[number]);
word = strcat(word, " ");
}
cout << "Returning word:" << word;
return word;
}