- ベストアンサー
【C】引数の変換をする場合どちらの方法を使うべきでしょうか?
int main(int argc, char* argv[]) { int i; /* argv[1]をintになおして格納用 */ 処理 } という感じでメインを作ると思いますが 引数のargv[0]はファイルの絶対パス argv[1]には"必ず"数字(整数)が入っていると仮定して argv[1]をint型に変換する場合 (1) sscanf(argv[1], "%d", &i); とするか (2) stdlib.hをインクルードして i = atoi(argv[1]); とするかの二通りをとりあえず思いついたのですが どちらもintに変換された値が入るわけですが C言語になれておられる方なら普通どちらをつかいますか? (1)or(2) 又はそれ以外の方法、どっちでも良し、場合によるetc... ご意見よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
sscanfは今回のような単純な処理を行うにはオー場スペックです。 atoiは古い関数なので、可能な限り使うべきではありません。理由は、オーバーフロー等のエラーが発生しても検出できなかったり、数字以外が現れて途中で解析が中断されてもわからないからです。 というわけで、今回の場合はstrtolを使うのが妥当です。符号なしの場合はstrtoulです。strtolならエラーチェックができますし、16進数や8進数が混在していても解析することができます。
その他の回答 (3)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
私もatoiですね。 sscanfだと、その関数呼び出しが何をやっているのか書式指定文字列を見るまで分かりませんが、atoiであれば「atoi」という文字を見た時点で分かるので、分かりやすさが違います。
お礼
ありがとうございます。 やはり皆さんatoiですね。 >atoiであれば「atoi」という文字を見た時点で分かるので、分かりやすさが違います。 確かにそのとおりですね。 参考にさせていただきます。
- jam_with_ju2
- ベストアンサー率50% (5/10)
atoiをオススメします。 atoiの方が『直感的に分かり易い』です。 コードは書く時よりも、見た時に分かりやすい方を選択する事をオススメします。(コメント書けば同じなんですが;) (sscanfなんて、はじめて見ましたよw)
お礼
ありがとうございます >sscanfなんて、はじめて見ましたよ atoiがあるのにわざわざsscanfですることもないんですが同時に思いついたのがこの二つだったわけでatoiと比べる相手になったわけです。 >コードは書く時よりも、見た時に分かりやすい方を選択する事をオススメします 確かにそうですね、修正の際等で見難いのは良くないですね。 参考にさせていただきます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
別にどっちでもいいと思いますけど、 私だったら、atoiかな 機能として、sscanfまでいらないし、atoiで充分かと
お礼
ありがとうございます たしかにsscanfとatoiではatoiのほうが手軽ですよね。 参考にさせていただきます。
お礼
ありがとうございます strtolというのもあるのですね、エラー検出や基数指定をする場合にはこちらを使う方が良いようです。 今回は一応必ず数字が入っているという条件をつけてみたのでエラーはないという前提だってわけですが、実際ではエラーチェックしないわけないですしatoiは極力使わない方が良いのかもしれませんね。 参考にさせていただきます。