2015-10-26 27 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.如果你想将“*”传递给程序,你可以使用下面的方法。

“*”(或)“*”(或)\ *

相关问题