main 中的 var arg 列表

发布于 2024-09-24 20:40:17 字数 301 浏览 3 评论 0原文

我想像这样使用我的程序:

./program -I /usr/include/ /usr/bin/ /usr/local/include/ ...

开关可以像在 var args 列表中一样不断地打开。我怎样才能在 C99 中做到这一点?最好得到像 char **args_listchar *args_list[] 这样的东西,其中包含 /usr/include等所有内容>/usr/bin/

I want to use my program like this:

./program -I /usr/include/ /usr/bin/ /usr/local/include/ ...

Where the switch can go on and on like in a var args list. How could I do that in C99? Preferably get a something like char **args_list or char *args_list[] that contains all of the things like /usr/include and /usr/bin/.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我不咬妳我踢妳 2024-10-01 20:40:17

运行以下代码的输出:

int main(int argc, char* argv[])
{
    for (int i = 1; i < argc; ++i)
    {
        printf("%s\n", argv[i]);
    }
}

program -I /usr/include/ /usr/bin/ /usr/local/include/ 执行

输出:

-I
/usr/include/
/usr/bin/
/usr/local/include/

请注意,在代码示例中,初始索引为 <代码>1。这是因为 argv 变量中的第一个指针是程序的名称。在本例中,它将是program

The output of running the following code:

int main(int argc, char* argv[])
{
    for (int i = 1; i < argc; ++i)
    {
        printf("%s\n", argv[i]);
    }
}

Executed by program -I /usr/include/ /usr/bin/ /usr/local/include/

Output:

-I
/usr/include/
/usr/bin/
/usr/local/include/

Note that in the code example the initial index is 1. This is because the first pointer in the argv variable is the name of the program. In this case it would be program.

仅此而已 2024-10-01 20:40:17

更新中的程序可能会出现段错误,因为您正在超出数组末尾:

    printf("%s\n", argv[2]);

无法保证存在 argv[2]

(如果 argc==2 它可能为 null,但我认为并非所有 printfs 都能处理这个问题。)

Your program in the update is probably segfaulting because you're running off the end of the array:

    printf("%s\n", argv[2]);

there's no guarantee there is an argv[2].

(It may be null if argc==2, but I think not all printfs cope with that.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文