如何检查argv [i]的值是否为null,如果为true,则结束程序

时间:2018-03-13 02:59:14

标签: c

int main (int argc, char* argv[]){

    int toSleep;
    int produce; 
    int consume; 
    int i = 0;
    //get the values for sleep, produce, consume 
    toSleep = atoi(argv[1]);
    produce = atoi(argv[2]);
    consume = atoi(argv[3]);
    //check if the user input a vaild inpusts 

    //if(argc !=4){
   //printf("You are missing an input\n");
  //        exit(0);
  //}`enter code here`
    if(toSleep == '\0' ||  produce == '\0' || consume == '\0' ){
        printf("You are missing an input\n");
        exit(0);
    }else if (toSleep <=0 || produce<= 0 || consume <=0 ){
        printf("Please provide a vaild inputs \n");
        exit(0);
    }else {
    //continue to the program 
}

我正在努力确保用户输入正好3个输入;如果一个丢失或为null,我应该打印一条错误消息并终止该程序。我尝试编译时总是遇到这个错误

./a4  
 makefile:5: recipe for target 'semaphore' failed make: ***
[semaphore] Segmentation fault (core dumped)

有人能告诉我这里做错了吗?

1 个答案:

答案 0 :(得分:6)

检查argc的值,它会告诉你已经传递了多少个参数。

int main(int argc, char **argv)
{
    if(argc != 4)
    {
        fprintf(stderr, "usage: %s sleep produce consume\n", argv[0]);
        return 1;
    }

    toSleep = atoi(argv[1]);
    produce = atoi(argv[2]);
    consume = atoi(argv[3]);
    ....
}

请注意,argc是参数数量加上文件名的值 执行二进制文件(更确切地说是二进制文件的执行方式)和 argv[0]总是那个字符串。所以当argc == 4时,有3个参数 已通过(argv[1]argv[2]argv[3])和argv[4] == NULLargv列表 总是NULL终止。

如果您想检查某个人argv[i]是否为NULL,那么

if(argv[i] == NULL)
{
    // argv[i] is NULL
}

但如果您正确检查argc,通常不必执行这些检查。 但有时检查NULL是有意义的,例如当你有时 可变数量的参数,当程序可以采用3或4个参数时, 然后检查argv[3] == NULL是否也是一个选项,看看最后一个是否可选 论证已经过去了。但我还是喜欢检查argc

另请注意,toSleepproduceconsumeint,但检查

if(toSleep == '\0' ||  produce == '\0' || consume == '\0' )

技术上是正确的,我建议你这样做

if(toSleep == 0 ||  produce == 0 || consume == 0 )

更清楚地表明你的意图。