在命令行中声明 -n 参数以接受整数 - C

Declaring a -n argument to accept an integer in the command line - C

我正在编写一个程序来打印 .txt 文件的最后 n 个字符。我希望使用 -n 参数从命令行向 运行 程序添加功能,以输入要打印的字符数。

我试过声明 int main(int argc, char* argv[]),但这似乎可以接受任何数量的参数,而我只需要一个 -n 参数。

为此,您可以使用 strncmpstrtol:

int main(int argc, char* argv[])
{
     int n = 0;
     if(argc > 1)
     {
        if(!strncmp(argv[1], "-n", 2))
        {
            n = strtoll(argv[1]+2, NULL, 10);
        }
     }
     if(n == 0) /* fail */;
     /* do stuff */
}

这会检查 argv 是否有多个参数(程序名称),然后检查 -n,如果找到,则直接在 [= 之后转换数字14=] 为整数(即​​ -n3 转换为三)。

如果您只想接受一个参数而其他参数失败,请将 argc > 1 更改为 argc == 2

而且我只需要一个 -n 参数。如果需要 -n 参数,则至少需要 3 个参数。 (意思是 argc - 参数计数 将为 3。)

... 这是假设 -n 参数后跟一个整数值以指示要读取的字符数。如果要从文件中读取的字符数为 3,则将在命令行上调用它,例如:

programName.exe -n 3 

这导致 main(int argc, char* argv[]) 的参数被填充为:

argc == 3
argv[] == {"programName.exe", "-n", "3"}

所以是的,C main 签名 int main(int argc, char* argv[]) 将容纳 1 到多个参数,但这并不排除它被用于创建只接受 2 个参数的程序。 (按照惯例列出的第一个 参数 始终是代码编译成的程序的可执行名称。)

如果您只想拥有一个额外的参数(这将导致 2 个实际参数的计数),请跳过包括“-n”并定义您的用法因为需要在程序名称后跟一个正数:

programName.exe 3

然后像这样编码:

int main(int argc, char *argv[])
{
    char *dummy;
    int val;
    if(argc != 2)
    {
        printf("Usage: prog.exe <n> where <n> is a positive integer value.\nProgram will now exit");
        return 0;
    }
    // Resolve value of 2nd argument:
    val = strtol(argv[1], &dummy, 10);
    if (dummy == argv[1] || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE))
    {
            //handle error
    }
    //use val to read desired content from file
    ...

    return 0;
}