2015-10-26 48 views
2
#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    printf("%d\n", argc); 
} 

使用GCC編譯這個簡單程序主(INT ARGC,CHAR *的argv [])給出奇怪的結果*作爲命令行參數

[email protected]:~/KANDR$ ./a.out 
1 
[email protected]:~/KANDR$ ./a.out 13 432 
3 
[email protected]:~/KANDR$ ./a.out 13 432 + 
4 
[email protected]:~/KANDR$ ./a.out 13 432 + * 
112 
[email protected]:~/KANDR$ ^C 

爲什麼最後一個命令返回112,當我有*作爲命令行參數?

+0

你可以通過修改代碼來打印參數以及ARGC已經調試自己這一點。然後你會看到麻煩是什麼。 ('for(int i = 0; i

回答

3

由於shell將*擴展爲當前目錄中的文件名。爲了確保嘗試這樣

for (size_t i = 0 ; i < argc ; ++i) 
    fprintf(stdout, "arg[%zu]: %s\n", i, argv[i]); 

它究竟是如何rm *將刪除當前目錄中的所有文件。

+0

那麼應該怎麼辦? –

+0

轉義它,就像'\ *'或者''*''。 –

+0

事情是,當我在命令行參數中有*時,argc計數將作爲當前目錄中的文件總數加上命令行參數的no,我如何通過*作爲命令行參數而不是整個文件列表? –

1

*在shell中提取當前目錄中的所有文件並放入命令行參數列表中。 所以argc來了112.如果你想將「*」傳遞給程序,你可以使用下面的方法。

「*」(或)「*」(或)\ *

相關問題