• ベストアンサー

【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... ご意見よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

sscanfは今回のような単純な処理を行うにはオー場スペックです。 atoiは古い関数なので、可能な限り使うべきではありません。理由は、オーバーフロー等のエラーが発生しても検出できなかったり、数字以外が現れて途中で解析が中断されてもわからないからです。 というわけで、今回の場合はstrtolを使うのが妥当です。符号なしの場合はstrtoulです。strtolならエラーチェックができますし、16進数や8進数が混在していても解析することができます。

yksin
質問者

お礼

ありがとうございます strtolというのもあるのですね、エラー検出や基数指定をする場合にはこちらを使う方が良いようです。 今回は一応必ず数字が入っているという条件をつけてみたのでエラーはないという前提だってわけですが、実際ではエラーチェックしないわけないですしatoiは極力使わない方が良いのかもしれませんね。 参考にさせていただきます。

その他の回答 (3)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

私もatoiですね。 sscanfだと、その関数呼び出しが何をやっているのか書式指定文字列を見るまで分かりませんが、atoiであれば「atoi」という文字を見た時点で分かるので、分かりやすさが違います。

yksin
質問者

お礼

ありがとうございます。 やはり皆さんatoiですね。 >atoiであれば「atoi」という文字を見た時点で分かるので、分かりやすさが違います。 確かにそのとおりですね。 参考にさせていただきます。

回答No.2

atoiをオススメします。 atoiの方が『直感的に分かり易い』です。 コードは書く時よりも、見た時に分かりやすい方を選択する事をオススメします。(コメント書けば同じなんですが;) (sscanfなんて、はじめて見ましたよw)

yksin
質問者

お礼

ありがとうございます >sscanfなんて、はじめて見ましたよ atoiがあるのにわざわざsscanfですることもないんですが同時に思いついたのがこの二つだったわけでatoiと比べる相手になったわけです。 >コードは書く時よりも、見た時に分かりやすい方を選択する事をオススメします 確かにそうですね、修正の際等で見難いのは良くないですね。 参考にさせていただきます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

別にどっちでもいいと思いますけど、 私だったら、atoiかな 機能として、sscanfまでいらないし、atoiで充分かと

yksin
質問者

お礼

ありがとうございます たしかにsscanfとatoiではatoiのほうが手軽ですよね。 参考にさせていただきます。

関連するQ&A