关于#c语言#的问题:Linux 上直接传参给argv打印出来是乱码

Linux 上直接传参给argv打印出来是乱码

img

int main(int argc, char const *argv[])
{
    printf("%s\n",argv+1);
    if (strcmp(argv + 1, "1")==0)
    {
        get_user_info();
    }
    if (strcmp(argv + 1, "0")==0)
    {
        read_user_info();
    }

    return 0;
}

#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    printf("%s %d\n", argv[0], argc);
    if (argc != 1)
    {
        printf("%s\n", argv[1]);
        if (strcmp(argv[1], "1") == 0)
        {
            // get_user_info();
        }
        if (strcmp(argv[1], "0") == 0)
        {
            // read_user_info();
        }
    }

    return 0;
}

argv是输入的参数啊!你这里怎么做输出呢?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7673448
  • 这篇博客你也可以参考下:argc与argv的理解
  • 除此之外, 这篇博客: Linux C/C++ 处理命令行参数中的 argc 和 argv 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    到目前为止,大部分人编写的所有程序都可以用一个命令运行。举个例子,如果我们编译了一个称之为 myprog 的可执行程序,我们能够在 Linux 命令行使用以下命令运行它:

    ./myprog
    

    但是,如果你想从命令行向正在运行的程序传递信息,该怎么办?考虑一个更复杂的程序,比如 GCC。要编译 myprog 的可执行文件,我们在命令行输入以下内容:

    gcc -o myprog myprog.c
    

    字符串 -o, myprogmyprog.c 都是 gcc 的命令行参数。(从技术上讲,gcc 也是一个参数,我们稍后会看到)

    命令行参数非常有用。毕竟,如果不能向 C 函数传递参数,C 函数就不会很有用了——添加向程序传递参数的功能会使它们更有用。事实上,你在命令行上传递的所有参数最终都作为程序中 main 主函数的参数。

    到目前为止,我们用于 C 程序的框架大致如下:

    #include <stdio.h>
    
    int main() 
    {
        return 0;
    }
    

    从现在开始,我们的示例可能看起来更像这样:

    #include <stdio.h>
    
    int main(int argc, char *argv[]) 
    {
        return 0;
    }
    

    正如你所看到的,main 函数现在有了参数。变量 argc 代表“参数数量”;argc 包含传递给程序的参数个数。变量 argv 代表“参数向量”。向量(vector)是一维数组,argv 是字符串的一维数组。每个字符串都是传递给程序的参数之一。

    例如命令行:

    gcc -o myprog myprog.c
    

    将产生 GCC 内部的以下值:

    argumentvalue
    argc4
    argv[0]gcc
    argv[1]-o
    argv[2]myprog
    argv[3]myprog.c

    如你所见,第一个参数(argv[0])是调用程序的名称,在本示例中它是 gcc。因此,程序将始终至少有一个参数,argc 将始终至少为 1

    以下程序接受任意数量的命令行参数并将其打印出来:

    #include <stdio.h>
    
    int main(int argc, char const *argv[]) {
        printf("argc: %d\n", argc);
        for (int i = 0; i < argc; i++) {
            printf("argv[%d] = %s\n", i, argv[i]);
        }
        return 0;
    }
    

    如果你编译你的程序名为 myprog,然后以 ./myprog a b c 的方式调用它,则它会输出以下的打印:

    user@hostname:examples$ ./myprog a b c
    argc: 4
    argv[0] = ./myprog
    argv[1] = a
    argv[2] = b
    argv[3] = c
    
  • 以下回答来自chatgpt:

    问题分析: 根据参考资料中提到的内容,我们应该做以下几步来解决这个问题: 1. 使用main函数的参数argc和argv来接收命令行传递的参数。 2. 使用printf函数打印参数。

    解决方案: 首先,我们需要在代码中使用main函数的参数argc和argv来接收命令行传递的参数。然后,我们使用printf函数来打印这些参数。下面是具体的代码示例:

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        printf("argc: %d\n", argc);
        for (int i = 0; i < argc; i++) {
            printf("argv[%d] = %s\n", i, argv[i]);
        }
        return 0;
    }
    

    以上代码中,我们首先打印出argc的值,即接收到的参数的个数。然后,使用循环遍历argv数组,打印出每个参数的值。运行程序并传递参数,即可看到打印出来的参数值。

    请注意,根据参考资料中的描述,argv[0]存储的是调用程序的名称,而不是文件名。

    以上就是解决该问题的具体步骤和代码示例。如果你有任何其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^