当我不使用引号时,argc 究竟如何工作?

How exactly does argc work when I don't use quotation marks?

我的代码很简单:

#include <stdio.h>

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

输入

后打印17
./a.out 1 2 3 + *

它不应该打印 6 吗?如果我将 '' 放在除 ./a.out 之外的每个参数周围,程序的行为就符合预期。这很奇怪,因为我可以在不使用引号的情况下使用一些带有标志的程序('', "").

如果您不引用或转义 *,它会在形成程序参数时被 shell 扩展为通配符。它被替换为当前目录中的所有名称(以 . 开头的除外)。

当您运行执行此操作时,您的目录中必须有 12 个文件和子目录。