• ベストアンサー

実行結果をコマンドライン引数として渡す方法について

test1.cはコマンドラインから引数をとり処理するプログラム test2.cは「Hello!」と出力するプログラム。 これらのプログラムをコンパイルして、次のような引数の渡し方をしてHello!と表示したいのですがうまくいきません。 実際の結果 ----------------------------------------- $ ./test1.exe ./test2.exe ($はプロンプト) $ ./test2.exe $ ----------------------------------------- 期待する結果 ----------------------------------------- $ ./test1.exe ./test2.exe $ Hello! $ ----------------------------------------- ここでプログラムの仕様を示しておきます。 プログラム1(test1.c)の中身 -------------------------------------- #include <stdio.h> main(int argc, char *argv[]){ printf("%s\n", argv[1]); } -------------------------------------- プログラム2(test2.c)の中身 -------------------------------------- #include <stdio.h> main(){printf("Hello!\n");} -------------------------------------- よろしくお願いします!

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「./test2.exeの実行結果を test1.exeのコマンドライン引数として持たせる」とはどういうことでしょうか? 今の場合, test2.exe の出力が Hello (+改行) だから, この「Hello (+改行) を test1.exe のコマンドライン引数にしたい」ってこと? もちろんプログラムで作れるけど, `...` じゃダメ?

revo_777
質問者

お礼

「`」は、アクサングラーブって言う記号なんですね。 ありがとうございました。

revo_777
質問者

補足

ありがとうございます。その方法で出来ました! ただ`...`の「`」の出し方が分かりませんね…。 色々と変換してみたのですが。 '...'とはまた違うんですね。

その他の回答 (5)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.6

>./test1 World | ./test2 >とした場合「World」はどこに行ったのでしょうか? test2は標準入力からの入力を受け取るようになっていないため、 そもそもtest1とtest2をパイプでつなぐことに意味がありません。 #5さんの回答内容を含めて。

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.5

元のプログラムを使って ./test1 | ./test2 パイプ(pipe)を使用 http://ja.wikipedia.org/wiki/パイプ_(コンピュータ)

revo_777
質問者

補足

ご回答ありがとうございます。 確かにこれだとHelloと表示されるのですが少し趣旨が 違うのではないかと思います。 仮に ./test1 World | ./test2 とした場合「World」はどこに行ったのでしょうか? 2回も回答下さっているのにあれこれ言ってすみません。

回答No.4

う~ん、何となく言ってる事は予想付くんですが……。 多分、「高階関数」的な事をやりたいんでしょう。 ただ、Cじゃかなりメンド臭いのでは? そう言う意味では「言語の選定」自体が間違っているのでは、と言う気がちょっとします。Cは低レベルですから。 次のリンクを参照して下さい。 多分狙っているのは「こう言う事」なんでしょう。 高階関数: http://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0

revo_777
質問者

補足

ご回答ありがとうございます。 参考になりました!

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

>printf("%s\n", argv[1]); これは、引数で与えた文字列(今回は"./test2.exe")を 出力するための文です。 ./test2.exe を実行するための文ではありません。 なお、argv[1] にアクセスできるためには、argc が2以上でなければなりません。 if (argc >= 2) という条件文が必要です。 この条件文がない状態で、実行時に引数を与えなかった場合、 プログラムが落ちてしまうことでしょう。

revo_777
質問者

補足

ご回答ありがとうございました

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.1

#include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]){  system(argv[1]); }

revo_777
質問者

補足

こういう関数があるのだなと勉強になりました。 ありがとうございます。 ただ、printfの場合では./test2.exeの実行結果を test1.exeのコマンドライン引数として持たせる事は不可能なのでしょうか?