- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:atoi関数の自作)
自作のatoi関数で桁あふれが起きる原因と修正方法
このQ&Aのポイント
- C言語で自作したatoi関数で桁あふれが起きる原因と修正方法について教えてください。
- atoi関数は1~9までの文字列を一つずつ配列に格納し、変換することを目的として作られています。
- しかし、現在の実装では桁あふれが起きてしまっています。どの部分を修正すれば正確な答えが出るようになるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
前の人の回答の以下の部分、 number=number+(n-48); を num=num*10 + (n-'0'); にして、 return num; にするといいんじゃない? しかし、ascii2intの型がlongって・・・
その他の回答 (2)
- SaKaKashi
- ベストアンサー率24% (755/3136)
回答No.2
long ascii2int(char number[]){ long num = 0L ; int i=0; int n ; while(number[i]!='\0'){ n=number[i] ; if ( n < '0' || n > '9' ) { return -1 ; } else { if ( i > 10 ) { return -1 ; } else { number=number+(n-48); i++; } } } return num; }
質問者
補足
この通りに入力して実行してみましたところ、正の整数を入力しても0が出るのみとなってしまいました
- KAZUMI2003
- ベストアンサー率37% (77/208)
回答No.1
ascii2intの戻り値の型が定義されていない。 そのなかで、いきなり初期化もしていない自動変数をwhileの制御変数にしている。 もちろん、その中での変数も勘違いかな? これ以降、追っかけるのがめんどくなったので、読んでないけど、 桁と10の何乗かの解釈が、間違ってない?
補足
変えてみたところできました! しかし元の質問には1つずつと書いてしまいましたが、配列に9個数字(文字)を入れて関数に渡し、 それを全て数値に変換して戻すというプログラムにしなければならなかったようです。 自分の問題の解釈が間違っているのかもしれません