关于argc和argv的澄清

关于argc和argv的澄清,c,C,我对什么是argc和argv有一些疑问,我似乎无法理解这个概念,因为我应该使用什么以及如何使用它们 就像我有一个程序,它从命令行接收两个介于-100000和100000之间的整数,计算三次加法并打印结果,同时执行所有需要检查的参数数量及其正确性 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int a, b; char ch; if (argc

我对什么是argc和argv有一些疑问,我似乎无法理解这个概念,因为我应该使用什么以及如何使用它们

就像我有一个程序,它从命令行接收两个介于-100000和100000之间的整数,计算三次加法并打印结果,同时执行所有需要检查的参数数量及其正确性

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int a, b;
    char ch;

    if (argc != 4)
    {
        printf("ERROR - Wrong number of command line parameters.\n");
        exit(1);

    }

    if (sscanf(argv[1], "%d", &a) != 1)
    {
        printf("ERROR - the first parameter (%s) is not a valid integer.\n",
                argv[1]);
        exit(2);
    }

    if (sscanf(argv[2], "%d", &b) != 1)
    {
        printf("ERROR - the second parameter (%s) is not a valid integer.\n",
                argv[2]);
        exit(2);
    }
    ch = argv[3][0];

    if (ch == 'a')
        printf("The sum result is %d\n", a + b);
    else if (ch == 'b')
        printf("The subtraction result is %d\n", a - b);
    else if (ch == 'c')
        printf("The multiplication result is %d\n", a * b);
    else if (ch == 'd')
    {
        if (b != 0)
            printf("The division result is %d\n", a / b);
        else
            printf("ERROR the second value shoulb be different than 0 \n");
    }
    else
        printf("ERROR parameter (%c) does not correspond to a valid value.\n",
                ch);
    return 0;
}
但是程序如何从命令行接收两个参数??我在哪里输入它们??我正在使用代码块

argc是从命令行调用程序时传递给程序的参数数

argv是接收参数的数组,也是字符串的数组

请注意,程序名总是自动传递的。 假设您的程序可执行文件是test,当您从终端调用时:

./text 145 643
argc将是3:程序名和两个数字
argv将是char*数组{./text,145643}

当您编写代码时,说hello.c,您可以从终端运行它,方法是从终端转到该目录/文件夹,并使用类似gcc的编译器对其进行编译

你好,c-o你好

如果您使用的是Windows,以及类似于Turbo C或Visual Studio的编译器,那么它将创建一个.exe文件。这将创建一个可执行文件

从命令行运行文件时,可以使用命令行参数作为程序的输入

在终端上,您可以./hello arg1 arg2,其中arg1和arg2是它的命令行参数。要了解如何在Windows中使用诸如Turbo C之类的编译器执行此操作

那么什么是argc和argv[]? 您的主要函数使用mainint argc、char*argv[]获取命令行参数

argc是传递的命令行参数数。在上述情况下,这是3。 argv[]是字符串数组,在本例中为3个字符串。argv[1]将等于arg1,argv[2]将等于arg2/hello将出现在argv[0]中。 因此,您可以在命令行中提供命令行参数,无论是Linux还是Windows。上面的解释更适用于Linux。有关Turbo C中的命令行参数,请参见和。对于Visual C,我不建议使用Turbo C


要了解有关命令行参数的更多信息,请阅读。

可能重复的“请勿使用sscanf”。使用strtol并检查endptr以确认它是有效的整数,或者确定它是否是有效的整数。尝试从命令行编译。你看,你说的是命令行,但你没有使用它,你使用的是IDE。我确信您可以在IDE中设置它们,以便它在执行程序时传递参数。但是,如果您从命令行(如gcc-Wall-Werror-O0-g3 my_source.c-o my_executable&./my_executable.c)编译,则会简单得多,除非该程序是从另一个程序中使用exec调用的,您可以决定第一个参数是什么。它通常是程序名,或者更准确地说是命令行中使用的值。例如,如果使用绝对路径调用程序,则该路径将包含在argv[0]中。这似乎是一个愚蠢的问题,但如何从终端调用?@IharobAlAsimi不知道!丹:你在Windows上吗?嗯,我不是Windows用户,但这应该有帮助:而且,即使我不是代码块用户,这也应该有帮助:谢谢!!我会查的!