在命令行中声明 -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
参数。
为此,您可以使用 strncmp
和 strtol
:
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;
}
我正在编写一个程序来打印 .txt
文件的最后 n
个字符。我希望使用 -n
参数从命令行向 运行 程序添加功能,以输入要打印的字符数。
我试过声明 int main(int argc, char* argv[])
,但这似乎可以接受任何数量的参数,而我只需要一个 -n
参数。
为此,您可以使用 strncmp
和 strtol
:
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;
}