アプリ版:「スタンプのみでお礼する」機能のリリースについて

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");}
--------------------------------------

よろしくお願いします!

A 回答 (6件)

「./test2.exeの実行結果を test1.exeのコマンドライン引数として持たせる」とはどういうことでしょうか? 今の場合, test2.exe の出力が Hello (+改行) だから, この「Hello (+改行) を test1.exe のコマンドライン引数にしたい」ってこと?


もちろんプログラムで作れるけど, `...` じゃダメ?

この回答への補足

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

'...'とはまた違うんですね。

補足日時:2009/03/29 10:49
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/03/29 18:58

>./test1 World | ./test2


>とした場合「World」はどこに行ったのでしょうか?

test2は標準入力からの入力を受け取るようになっていないため、
そもそもtest1とtest2をパイプでつなぐことに意味がありません。
#5さんの回答内容を含めて。
    • good
    • 0

元のプログラムを使って



./test1 | ./test2

パイプ(pipe)を使用
http://ja.wikipedia.org/wiki/パイプ_(コンピュータ)

この回答への補足

ご回答ありがとうございます。

確かにこれだとHelloと表示されるのですが少し趣旨が
違うのではないかと思います。

仮に
./test1 World | ./test2
とした場合「World」はどこに行ったのでしょうか?

2回も回答下さっているのにあれこれ言ってすみません。

補足日時:2009/03/29 11:13
    • good
    • 0

う~ん、何となく言ってる事は予想付くんですが……。



多分、「高階関数」的な事をやりたいんでしょう。
ただ、Cじゃかなりメンド臭いのでは?
そう言う意味では「言語の選定」自体が間違っているのでは、と言う気がちょっとします。Cは低レベルですから。

次のリンクを参照して下さい。
多分狙っているのは「こう言う事」なんでしょう。

高階関数:
http://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E% …

この回答への補足

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

補足日時:2009/03/29 11:06
    • good
    • 0

>printf("%s\n", argv[1]);



これは、引数で与えた文字列(今回は"./test2.exe")を
出力するための文です。
./test2.exe を実行するための文ではありません。

なお、argv[1] にアクセスできるためには、argc が2以上でなければなりません。
if (argc >= 2)
という条件文が必要です。
この条件文がない状態で、実行時に引数を与えなかった場合、
プログラムが落ちてしまうことでしょう。

この回答への補足

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

補足日時:2009/03/28 23:50
    • good
    • 0

#include <stdio.h>


#include <stdlib.h>

main(int argc, char *argv[]){
 system(argv[1]);
}

この回答への補足

こういう関数があるのだなと勉強になりました。
ありがとうございます。

ただ、printfの場合では./test2.exeの実行結果を
test1.exeのコマンドライン引数として持たせる事は不可能なのでしょうか?

補足日時:2009/03/28 23:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!