【发布时间】:2020-07-11 19:18:07
【问题描述】:
我编写了一个必须显示主要参数的代码,但是当我编译它并输入“*”时,程序会显示我的文件结构。
cmd中的命令如下:program.exe 1 2 3 *
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const* argv[]) {
for (int i=0; i<argc; i++) printf("%s\n", argv[i]);
return 0;
}
结果是:
program
1
2
3
program.c
program.exe
10-03-20
11-02-20
还有我的问题:是否可以强制程序打印“*”而不是列出文件。
【问题讨论】:
-
*由 shell 解释,而不是程序本身。使用\*或"*"将* 传递给程序。 -
问题是
*被你的shell转换成"file1 file2 ..."。 您的 C 程序没有任何问题(尽管不需要包含<stdlib.h>)。为了防止 shell 转换 star 使用引号:program.exe 1 2 3 "*" -
与问题无关,但严格来说
char const* argv[]是不正确的。您可能不会自己发明 main() 的形式,只有编译器可以这样做。argv实际上是读/写内存,尽管写入它通常不是最好的主意。 -
我试过
"*",但我给出了相同的结果。我也试过\*,但这给了\$Recycle.Bin -
Windows cmd shell 不执行通配符扩展。要么不是从 cmd shell 运行,要么编译器正在插入逻辑来模拟 shell 会做的扩展
标签: c parameters mingw main wildcard-expansion