2013-11-20 47 views
0

我寫了一個小C程序,它以3個整數爲參數。如果我是這樣運行的:myapp 1 2 3運行正常,argc顯示正常4,但如果我這樣做:echo 1 2 3 | myapp,ARGC卻與此1.將多個參數傳遞給C程序

C代碼的相關部分是:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc, char **argv) 
{ 
printf("Entered: %i\n", argc); 
if (argc < 4) 
{ 
printf("You must enter 3 integers as command line arguments!\n"); 
exit(1); 
} 
} 

什麼這是錯的嗎?

回答

3

管道將第一個進程的輸出傳遞給第二個進程的stdin,這與命令行參數無關。你想要的是xargs,使用第一過程的輸出,並使用它作爲命令行參數:

echo 1 2 3 | xargs myapp 
+0

是的,我累了,我已經忘了xargs的...謝謝! :)我會盡快接受你的回答。 – Frantique

4

echo 1 2 3 | myapp調用myapp沒有參數。值通過stdin傳遞。

您可能需要(如果使用在Unix中的bash)使用這個來代替:

myapp `echo 1 2 3` 

或者,如果你有一個數字在一個名爲numbers.txt列表,你可以這樣做,以及:

myapp `cat numbers.txt` 
0

echo 1 2 3 | myapp將發送1 2 3到您的程序的標準輸入。如果你的程序沒有讀取它,它將永遠不會看到這些數字。你需要使用例如scanf這個工作。請注意,您將不得不自己分析字符串以計算以這種方式傳遞的「參數」的數量。