C 是否可以清除argv中的命令行参数?

C 是否可以清除argv中的命令行参数?,c,C,我目前正在学习C语言,我正在处理来自用户的命令行输入 我知道argc是计数,即输入命令的数量,argv是输入内容的数组 我知道如何检查用户是否在argc>1等被调用程序之后输入了值,并且我知道argv接受字符串类型的变量,我可以使用atoi()将其转换为实整数。但是,我不确定如何隐式地只接受整数。我曾尝试在argv周围使用isdigit等,但通常会出现段错误。有办法解决这个问题吗 int main(int argc, string argv[]) { if (argc == 2 &

我目前正在学习C语言,我正在处理来自用户的命令行输入

我知道argc是计数,即输入命令的数量,argv是输入内容的数组

我知道如何检查用户是否在argc>1等被调用程序之后输入了值,并且我知道argv接受字符串类型的变量,我可以使用atoi()将其转换为实整数。但是,我不确定如何隐式地只接受整数。我曾尝试在argv周围使用isdigit等,但通常会出现段错误。有办法解决这个问题吗

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…”:这可能是一个很好的开始,但您没有向我们显示有问题的代码,因此很难帮助您。@alk
atoi
能够将
const char*
转换为整数,即使它包含文本。例如
atoi(“-123junk”)
返回-123,而“-123junk”不是数字。