- ベストアンサー
C言語の [ atoi ] について
私は、C初心者です。 最近勉強していて 「atoi」というのがよく理解できません。 本を調べると 「文字列を整数に変換する。」 書かれています。 これは、どういう意味でしょうか。 「AAA」という文字列も 「1234」みたいな感じの整数になって しまうということでしょうか。 本の使用例で get(string); i=atoi(string); とあるのですが printf("%s",i); と付け加えたらやはり 数字で表示されるのでしょうか。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
「AAA」のように数値に変換できない文字列が与えられたときの動作は、Cの規格では「未定義」ということになっています。実際の動作は処理系によって違います。 たとえばMicrosoftのVisualCではゼロを返します。(参考URL) ところで、atoi()に限らずライブラリ関数の使い方には迷いますよね。そういう時は、人に聞く前に次の作業をおすすめします。 (1) 仕様を調べる。 C言語の規格や処理系のリファレンスを見て、「この関数はどのような動作をすることになっているか」を調べます。 前者については次の本がおすすめです。 http://www.amazon.co.jp/exec/obidos/ASIN/4774104329/ref=sr_aps_d_1_2/250-1884736-6144229 (2) 自分で動かす。 その関数を呼び出す簡単なプログラムを自分で書いてみて、いろいろ条件を変えながら動かしてみます。 聞くのが悪いというのではありません。プログラミング言語は、自分で手を動かさないと身につかないものなのです。習得の目的が、仕事であっても情処合格であっても同じです。本を読むだけで習得できるのは、よほどの天才でしょう。
その他の回答 (3)
- asuca
- ベストアンサー率47% (11786/24626)
書き忘れましたが"AAA"だったら変換が出来ないので0がかえされます。
- asuca
- ベストアンサー率47% (11786/24626)
文字列内の数字をint型に変換する物です。 ”1234”だったら1234がはいります。 認識できない文字があった段階で変換をやめますので”123A234”だったら123が返されます。
- kabasan
- ベストアンサー率44% (264/588)
まず、「文字列」と「変数」の違いは理解していらっしゃるでしょうか? atoiは「ank to integer」を縮めたもので、”12345”という「文字列」を12345という整数型の「変数」へ変換する関数です。 文字列が「12345ABC」のように、数字以外の文字が入っていた場合の動作は定義されておらず、処理系によって動作はまちまちです。つまり不正な入力で、プログラマーの責任で文字列に数字以外が含まれていないかチェックすべきです。 表示する場合は、整数型変数ですから、 printf("%d",i); と指定しないとエラーとなります。