C 是否可以清除argv中的命令行参数?
我目前正在学习C语言,我正在处理来自用户的命令行输入 我知道argc是计数,即输入命令的数量,argv是输入内容的数组 我知道如何检查用户是否在argc>1等被调用程序之后输入了值,并且我知道argv接受字符串类型的变量,我可以使用atoi()将其转换为实整数。但是,我不确定如何隐式地只接受整数。我曾尝试在argv周围使用isdigit等,但通常会出现段错误。有办法解决这个问题吗C 是否可以清除argv中的命令行参数?,c,C,我目前正在学习C语言,我正在处理来自用户的命令行输入 我知道argc是计数,即输入命令的数量,argv是输入内容的数组 我知道如何检查用户是否在argc>1等被调用程序之后输入了值,并且我知道argv接受字符串类型的变量,我可以使用atoi()将其转换为实整数。但是,我不确定如何隐式地只接受整数。我曾尝试在argv周围使用isdigit等,但通常会出现段错误。有办法解决这个问题吗 int main(int argc, string argv[]) { if (argc == 2 &
int main(int argc, string argv[])
{
if (argc == 2 && //code to ensure argv[1] is int)
{
//code
}
}
“…不确定如何仅隐式接受整数。”
这不是隐式完成的,您必须显式地测试每个字符串的内容
例如,使用字符串测试类别中的函数,遍历每个argv
字符串参数,即从argv[1]
到argv[argc-1]
,并测试字符类型以确保它是一个数值,从0
到9
和-
。(注意:可以包括其他有效的数字char
符号,例如:e
,x
,等等,但不在本示例中。)
一个简单的例子:
给定命令行:prog.exe 23 45 1f4-57
int main(int argc, char *argv[])
{
for(int i=1;i<argc;i++)
{
if(!test_argv(argv[i]))
{
//notify user of wrong input, and exit
printf("argv[%d] contains non numeric value. Exiting\n", i);
}
}
//continue with program
return 0;
}
bool test_argv(const char *buf)
{
while(*buf)
{
if((!isdigit(*buf)) && (*buf != '-'))
{
return false;
}
buf++;
}
return true;
}
intmain(intargc,char*argv[])
{
对于(int i=1;i这是否回答了您的问题?您所说的“隐式”是什么意思?当然没有办法保证shell。是什么阻止您读取和忽略/拒绝不正确的内容?读取为字符串并多次尝试sscanf()进行解析
就是这样做的。将0
从有效整数集中排除,您只需执行以下操作:int i;if(argc==2&&&(i=atoi(argv[1])){…
。如果您需要0
请选择strtol()
“我已经尝试使用isdigit…”:这可能是一个很好的开始,但您没有向我们显示有问题的代码,因此很难帮助您。@alkatoi
能够将const char*
转换为整数,即使它包含文本。例如atoi(“-123junk”)
返回-123,而“-123junk”不是数字。