見出し画像

C言語勉強ノート (C言語 - main関数の引き数を組み立てる)

私がコマンドラインでのプログラム実行環境整備が素人にはたいへんだって呟いてたら、、、なんとkznさんがWeb開発環境でのエミュレーションを実現してくださいました。素晴らしい!有難うございます。

さっそくこの環境で、私の演習課題を実行してみました。

演習の答案と実行結果

コマンドラインで指定するフォルダ/実行ファイル名/引数をマクロ変数DIRECTORY/EXECUTABLE/ARGUMENTで定義しておきます。
実行したいコードを、関数dummy_mainに記述します。

#include <stdio.h>
#include <string.h>
#define MAX_ARGS (256)
#define DIRECTORY "jm3nrhMBP-EN:c akio$"
#define EXECUTABLE "./a.out"
#define ARGUMENT "Hello world"

int dummy_main(int argc, char** argv) {

  for(int i = 1; i < argc; i++) {
    printf("%s\n", argv[i]);
  }

  return 0;
}

int main(void) {
    char test[] = ARGUMENT;
    char delimiter[] = " ";
    int argc = 0;
    char* args[MAX_ARGS];
    char *p;
 
    args[argc++] = EXECUTABLE;

    p = strtok(test, delimiter);
    if (p != NULL) {
          args[argc++] = p;
    }
    
    while (p != NULL){
        p = strtok(NULL, delimiter);
        if (p != NULL) {
          args[argc++] = p;
        }
    }

    printf("%s %s %s\n", DIRECTORY, EXECUTABLE, ARGUMENT);

    return dummy_main(argc, args);
}

実行結果

全く同じ出力結果を得ることができます!

jm3nrhMBP-EN:c akio$ ./a.out Hello world
Hello
world


先週末は頑張って、テキストエディタでコーディングし、ターミナルを起動してgccでコンパイルし、コンパイルエラーを見ながら再度テキストエディタでデバッグし、、、まぁ、当たり前の作業ではありますが、ウェブの開発環境の快適さとは雲泥の差でした。(とっとと開発環境を整備しろよ、って話ですよね、、、苦笑)

kznさん、お陰様でstrtok関数についても知ることができました。とても勉強になります。改めて有難うございました!


ここまで読んでいただき、有難うございました。

これまでの収益は全て、それを必要としておられる方々へ、支援機関を通して寄付させていただきました。この活動は今後も継続したいと思っています。引き続きよろしくお願いいたします。