2014-10-05 23 views
0

的代碼爲兩個節目是兩個程序的工作,管道在windows CMD不適合用C寫的

p1.c:

#include <stdio.h> 

int main() { 
    printf("Program1"); 
    return 0; 
} 

p2.c:

#include <stdio.h> 

int main (char argc, char *argv[]) {  
    printf("%s", argv[1]); 
    printf(" | Program2"); 
    return 0; 
} 

當在CMD中輸入p1 | p2時,預期的輸出 是:Program1 | Program2。但我得到的輸出是:(null) | Program 2。很明顯,p1的輸出不是從p2中取得的。我該如何解決這個問題?

回答

1

你不明白管道是如何工作的。將某些東西傳遞給其他東西意味着「使用程序1的標準輸出並將其提供給程序2的標準輸入。」通過使用argv,您假設程序1的輸出轉到程序2的參數,並且不正確。你需要scanf(或一些相當的)標準輸入,以獲得你正在尋找的結果。

無論是或者你需要調用p1使得它的輸出不會作爲參數輸入。

+0

工作!順便說一句,我怎樣才能以它的輸出作爲參數進入p2的方式調用p1? – sope 2014-10-05 03:20:10

+0

|是一個CMD exe字符。這對CMD.EXE以外的任何程序都沒有任何意義。如果使用|那麼CMD.exe需要解釋它。我指的是它在p2.c中的使用。 – Noodles 2014-10-05 09:02:12

+0

每個http://stackoverflow.com/questions/2768608/batch-equivalent-of-bash-backticks我會建議'/ f%a在('p1')做p2%a'。如果在批處理文件中,請記住使用%%而不是%。 – keefer 2014-10-05 16:43:03