繁体   English   中英

如何确定用户在命令行输入“*”以指示C中的多个文件

[英]How to determine users input “*” at command line to indicate multiple files in C

例如,如果用户键入命令行

匹配“你好”测试* in

它意味着在名称为“test”的所有.in类型的文件中找到“the”。

bool containMany=false;
int i;
for(i= 0; arguments[i]; i++){

    printf("ARGUMENTS  %s\n",arguments[i]);
    if(strstr(arguments[i],"*")){
        containMany=true;
        break;
    }
}

但它不起作用。 论点是:

ARGUMENT比赛

ARGUMENT你好

ARGUMENT test0.in

ARGUMENT test1.in

ARGUMENT test2.in

那么当用户输入“*”时,我如何使containsMany变为真?

那是因为你的shell会自动进行全局样式的替换。 如果您不希望shell将输入参数括在单引号中或使用反斜杠。

如果你的工作目录有文件A和B,那么这个表达式:

test *

将被取代

test A B

测试执行之前

另一方面,如果你这样运行:

test '*'

或者像这样:

test \*

那么就没有shell替换,你的程序实际上会看到这个星。

传统上,shell在命令行上执行通配符扩展 - 这就是在Unix风格的平台上完成的方式。 如果不需要扩展,则用户通常必须引用包含通配符的参数或转义wildard字符。

在Windows上, command.com / cmd.exe shell 执行文件名扩展。 然而:

  • MinGW toochain的运行时确实执行了文件名通配符的扩展。 要禁用此行为,请在CRT_noglob.o链接或添加零初始化的全局变量int _CRT_glob = 0; 到你的一个.c文件来禁用运行时的glob扩展。
  • MSVC包含一个目标文件setargv.obj ,它将导致运行时扩展命令行文件名通配符,如果这是您想要的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM