#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,当我有*
作为命令行参数?
答案 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; (或)\ *