main(int argc,char * argv [])为*作为命令行参数给出奇怪的结果

时间:2015-10-26 04:27:25

标签: c command

 #include <stdio.h>

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

这个用gcc编译的简单程序

saad@saad-700Z3C-700Z5C:~/KANDR$ ./a.out 
1
saad@saad-700Z3C-700Z5C:~/KANDR$ ./a.out 13 432
3
saad@saad-700Z3C-700Z5C:~/KANDR$ ./a.out 13 432 + 
4
saad@saad-700Z3C-700Z5C:~/KANDR$ ./a.out 13 432 +  *
112
saad@saad-700Z3C-700Z5C:~/KANDR$ ^C

为什么最后一个命令返回112,当我有*作为命令行参数?

2 个答案:

答案 0 :(得分:3)

因为shell将*扩展为当前目录中的文件名。为了确保尝试这样

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

rm *正是如何删除当前目录中的所有文件。

答案 1 :(得分:1)

shell中的*解压缩当前目录中的所有文件并放入命令行参数列表中。 所以argc来了112.如果你想通过&#34; *&#34;在程序中,您可以使用以下方法。

&#34; *&#34; (或)&#39; *&#39; (或)\ *