パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

引数の取り扱いと型変換にハマる5日目」記事へのコメント

  • > extern char *optarg;
    これと同じ宣言はgetopt.hの中に書いてあるので、getopt.hをインクルードしていれば自分で書く必要はありません。
    「getopt()とoptargを使うなら、必ずgetopt.hをインクルードして、自分で宣言を書いてはいけない」と憶える方が良いかもしれません。

    どうしてもoptargについて何か書かずにはいられないのであれば

    while ((option = getopt(argc, argv, "y:m:")) != -1) {
      switch (option) {
        case 'y' : year = atoi(optarg); break; /* 'optarg' is declared in getopt.h */
        case 'm' : month = atoi(optarg); break;
      }
    }

    みたいに、コメントを書きましょう。

    あと、atoi()は使い方こそ簡単ですが、変換に失敗しても黙って無意味な整数を返す性悪な仕様で、
    たとえばatoi("123hoge")は123を返します。したがって誤入力には非常に弱いです。ご注意ください。

犯人はmoriwaka -- Anonymous Coward

処理中...