見出し画像

C言語 - main関数の引き数を組み立てる

C言語教室 第12回(続) - 課題と演習

の演習で、main() の引き数を解釈する問題を出したのですが、ブラウザ環境では実行できませんし、GUIからだと引き数を設定する方法が、結構面倒だったりするので、ダミーの main 関数を用意しました。

#include <stdio.h>
#include <string.h>

#define MAX_ARGS (256)

int dummy_main(int argc, char** argv) {
  return 0;
}

int main(void) {
    char test[] = "test -v -n name arg1";
    char delimiter[] = " ";
    int argc = 0;
    char* args[MAX_ARGS];
    char *p;
    int i;
 
    p = strtok(test, delimiter);
    while (p != NULL){
        p = strtok(NULL, delimiter);
        if (p != NULL) {
          args[argc++] = p;
        }
    }

    printf("argc=%d\n", argc);
    for (i = 0; i < argc; i++) {
      printf("arg[%d]=%s\n", i, args[i]);
    }

    return dummy_main(argc, args);
}

実際に引き数を組み立ててプログラムを呼ぶのはシェルのお仕事なので、シェルの種類により、クオートとかエスケープの扱いがかなり異なるのですが、その辺りは置いておいて、単に空白で区切る処理だけにしました。

本当は main関数には、もう一つ引き数があるのですが、そこはそのままにしておきます。実際にどのように main が呼び出されるかは、以下の記事を参考に。

あなたが知らないプログラムの真の始まり――main()関数の前にあるスタートアップとは

ヘッダ画像は、いらすとや さんより
https://www.irasutoya.com/2015/06/blog-post_275.html


この記事が気に入ったらサポートをしてみませんか?