如何将argv分配给C中的指针变量?

问题描述

我正在尝试打印传递给 C 程序的参数,并且我想多次执行此操作。下面是代码。你可以看到,我已经创建了一个 count 变量并在每个 while 循环之前设置为 argc。是否有与 argv 类似的事情,以便它可以在 while 循环之前重置为 argv[0]?这是一个数组指针,我没有找到正确的方法

#include <stdio.h>

int main(int argc,char const *argv[])
{
    int count = argc;
    while (count-- > 0)
    {
        printf("%s%s",*argv++,(count > 0) ? " " : "");
    }
    printf("\n");

    count = argc;
    while (count-- > 0)
    {
        // how to reset argv to point to argv[0] before calling *argv++
        printf((count > 0) ? "%s " : "%s",*argv++);
    }
    printf("\n");

    return 0;
}

解决方法

您对 argv 的定义是错误的。来自 C11 标准 §5.1.2.2.1/2::

参数argc和argv以及argv指向的字符串 数组应可由程序修改,并保留其最后存储的 程序启动和程序终止之间的值。

它应该是 char **argvchar *argv[]

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

    char **savedArgv = argv;
    while (count--)
    {
        printf("%s%s",*argv++,(count > 0) ? " " : "");
    }
    printf("\n");

    count = argc;
    argv = savedArgv;
    while (count--)
    {
        // how to reset argv to point to argv[0] before calling *argv++
        printf((count > 0) ? "%s " : "%s",*argv++);
    }
    printf("\n");

    return 0;
}

https://godbolt.org/z/Me4Pq8