首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C Argv检查哪个argv路径来自什么输入

C Argv检查哪个argv路径来自什么输入
EN

Stack Overflow用户
提问于 2022-08-08 14:03:47
回答 2查看 105关注 0票数 2

如果我以通配符作为命令行参数输入路径,如:

testprogramm a* b*

该目录包含以下内容:

aa ab ba bb

我的argv字符串将包含:

{"testprogramm","aa","ab","ba","bb"}

但是,我想区分起源于第一个参数(a*)和第二个参数(b*)的文件,我如何做到这一点?我正在寻找的是一种方法,它可以通过上面的例子告诉我,"aa""ab"来自第一个参数,"ba""bb"来自第二个参数。

我知道cp.c命令可以做到这一点,但我不知道如何做到这一点,因为源代码是非常嵌套的。

编辑:标准副本(来自gnu核心实用程序)无法区分,只有嵌入(shell,其中的程序和实用程序是相同的文件)才能区分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-08 14:38:35

代码语言:javascript
复制
./program a* "|" b*

然后从程序中搜索分隔符:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int group = 0;

    for (int i = 1; i < argc; i++)
    {
        if (strcmp(argv[i], "|") == 0)
        {
            group++;
        }
        else
        {
            printf("group: %d file: %s\n", group, argv[i]);
        }
    }
    return 0;
}

产出如下:

代码语言:javascript
复制
group: 0 file: aa
group: 0 file: ab
group: 1 file: ba
group: 1 file: bb
票数 1
EN

Stack Overflow用户

发布于 2022-08-08 14:30:12

解决这个问题没有真正的解决方案,至少使用bash是这样的,因为它提供的有关argv的唯一信息是argv本身和argc。但是,由于输入是在每个参数基上排序的,所以可以检查第一个参数没有排序,所以它可以从另一个角度(b*和a*)检测它,但是没有真正的解决方案,除非从bash更改为像toybox或busybox这样的嵌入式util框。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73279156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档