- ベストアンサー
実行結果をコマンドライン引数として渡す方法について
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");} -------------------------------------- よろしくお願いします!
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
「./test2.exeの実行結果を test1.exeのコマンドライン引数として持たせる」とはどういうことでしょうか? 今の場合, test2.exe の出力が Hello (+改行) だから, この「Hello (+改行) を test1.exe のコマンドライン引数にしたい」ってこと? もちろんプログラムで作れるけど, `...` じゃダメ?
その他の回答 (5)
- asuncion
- ベストアンサー率33% (2127/6289)
>./test1 World | ./test2 >とした場合「World」はどこに行ったのでしょうか? test2は標準入力からの入力を受け取るようになっていないため、 そもそもtest1とtest2をパイプでつなぐことに意味がありません。 #5さんの回答内容を含めて。
- don_go
- ベストアンサー率31% (336/1059)
元のプログラムを使って ./test1 | ./test2 パイプ(pipe)を使用 http://ja.wikipedia.org/wiki/パイプ_(コンピュータ)
補足
ご回答ありがとうございます。 確かにこれだとHelloと表示されるのですが少し趣旨が 違うのではないかと思います。 仮に ./test1 World | ./test2 とした場合「World」はどこに行ったのでしょうか? 2回も回答下さっているのにあれこれ言ってすみません。
- cametan_42
- ベストアンサー率62% (162/261)
う~ん、何となく言ってる事は予想付くんですが……。 多分、「高階関数」的な事をやりたいんでしょう。 ただ、Cじゃかなりメンド臭いのでは? そう言う意味では「言語の選定」自体が間違っているのでは、と言う気がちょっとします。Cは低レベルですから。 次のリンクを参照して下さい。 多分狙っているのは「こう言う事」なんでしょう。 高階関数: http://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0
補足
ご回答ありがとうございます。 参考になりました!
- asuncion
- ベストアンサー率33% (2127/6289)
>printf("%s\n", argv[1]); これは、引数で与えた文字列(今回は"./test2.exe")を 出力するための文です。 ./test2.exe を実行するための文ではありません。 なお、argv[1] にアクセスできるためには、argc が2以上でなければなりません。 if (argc >= 2) という条件文が必要です。 この条件文がない状態で、実行時に引数を与えなかった場合、 プログラムが落ちてしまうことでしょう。
補足
ご回答ありがとうございました
- don_go
- ベストアンサー率31% (336/1059)
#include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]){ system(argv[1]); }
補足
こういう関数があるのだなと勉強になりました。 ありがとうございます。 ただ、printfの場合では./test2.exeの実行結果を test1.exeのコマンドライン引数として持たせる事は不可能なのでしょうか?
お礼
「`」は、アクサングラーブって言う記号なんですね。 ありがとうございました。
補足
ありがとうございます。その方法で出来ました! ただ`...`の「`」の出し方が分かりませんね…。 色々と変換してみたのですが。 '...'とはまた違うんですね。