コース一覧
    C言語中級 連結リスト・応用
    コマンドライン引数

    C言語中級 連結リスト・応用

    C言語の連結リストと応用的なデータ操作を学び、実装でデータを扱うコースです。

    1
    連結リスト
    01. 配列の限界15分
    02. ノードを定義する15分
    03. 先頭に追加する15分
    04. リストを歩く15分
    05. 任意位置の挿入と削除15分
    06. リストを全解放する15分
    07. つくる リスト版成績管理15分
    08. 第5章クイズ10分
    2
    応用
    01. 動的な二次元配列15分
    02. コマンドライン引数15分
    03. バイナリ保存15分
    04. エラーの調べ方15分
    05. つくる 引数とバイナリ保存15分
    06. 第6章クイズ10分
    3
    総合制作
    01. リスト版を完成させる20分
    02. メモリバグ演習20分
    03. 自由拡張20分
    04. 完成と次のステップ10分

    コマンドライン引数

    起動するときに値を渡す

    ここまでのプログラムは、動き始めてから scanf で値を受け取っていました。ただ、保存先のファイル名のように、動き出す前にもう決まっているものもあります。そういう値は起動時のコマンドラインで渡すのが普通です。

    プレーンテキスト

    ./seiseki data.bin 80 90

    この data.bin や 80 を受け取る入口が、main の引数です。

    argc と argv

    main には2つの書き方があります。

    c

    int main(void)
    int main(int argc, char *argv[])

    argc は渡された語の 個数、argv はその語を文字列として並べた配列です。さきほどの起動なら、argc は 4、argv[0] は実行ファイル名、argv[1] は "data.bin"、argv[2] は "80"、argv[3] は "90" になります。

    ここで必ず一度つまずくのが argv[0] です。自分で指定したのは3つなのに argc が 4 になるのは、実行ファイル名が先頭に入るからです。そしてその中身は、どう起動したかで ./seiseki にも /usr/local/bin/seiseki にも変わります。中身に頼った処理を書いてはいけません。

    char *argv[] は「char へのポインタの配列」で、前回の int ** と同じ形です。1本1本が文字列の先頭を指しています。argv[argc] は NULL だと規格で決まっているので、個数を使わずに終端まで歩くこともできます。

    届くのは必ず文字列

    80 と打っても、プログラムに届くのは数値ではなく '8' '0' と終端文字の並びです。計算に使うなら変換が要ります。

    c

    int score = atoi(argv[2]);

    atoi は変換できなかったときも 0 を返すだけなので、失敗したのか本当に 0 だったのかを区別できません。厳しく見たいときは strtol を使い、どこまで読めたかを受け取って確かめます。

    順番で決めるか、名前で決めるか

    引数の意味を位置だけで決めると、./seiseki 80 data.bin のように並べ替えられただけで壊れます。実用的なコマンドが -o data.bin や --out data.bin のような書き方を用意しているのは、位置ではなく名前で意味を決めるためです。仕組みとしては、argv を先頭から見ていって -o を見つけたら次の1本を保存先として扱う、というだけの走査です。ここではまず位置で決める形に慣れます。

    個数の確認を先に書く

    argv を読む前に、必要な数がそろっているかを必ず確かめます。argc を見ずに argv[1] を読むと、何も渡されなかったときに配列の外を触ることになり、その場で落ちます。落ちたプログラムは何も説明してくれないので、足りないときは使い方を案内して終わるのが親切です。

    では、保存先の名前と点数を引数で受け取るプログラムを書いてみましょう。

    要件

    1. argc が 3 未満のときは 引数が足りません と 保存先と点数を1つ以上指定してください の2行だけを出して終わる
    2. そろっているときは argcは4です の形で argc をそのまま出す
    3. 続けて 保存先はkokugo.txtです の形で argv[1] を出す
    4. 最後に 3科目の合計は240点です の形で、点数の個数と合計を出す
    5. 実行ファイル名 argv[0] は表示しない

    ヒント

    点数は argv[2] から argc - 1 までです。個数は argc - 2 で求まります

    argv の中身は文字列なので、足す前に atoi で数値に直します

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • バイナリ保存

      構造体をそのままの形で保存して読み戻せるようになります。

    • エラーの調べ方

      失敗の理由を具体的に表示できるようになります。

    • つくる 引数とバイナリ保存

      起動と保存を実用的な形にできるようになります。

    • 第6章クイズ

      二次元確保、引数、バイナリ保存の理解を確認します。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • コマンドラインキーボード入力で操作する画面
    • 引数位置引数=順番で渡す。
    • 配列サイズ固定の同型データの集まり
    • 処理計算や代入を表す長方形
    main.c
    エディタを読み込んでいます

    メモ

    コマンドライン引数

    ⌘S で保存