c optarg atoi没有参数

请考虑以下代码:

int number;

while((w = getopt(argc, argv, "n:s:")) != -1) {

        switch (w){

            case 'n': {

                opfile->filename = optarg;

            }break;

            case 's': {

                number = atoi(optarg);

            }break;

        }
}

现在,当我将两个选项或选项s都留空时,例如,我在没有命令行参数的情况下启动程序,那么number变量仍然会得到一个随机值。
我错过了什么?一些if语句在s的情况下?具体来说,我想介绍用户没有在命令行参数中为s指定特定值/选项的情况。


最佳答案:

当没有's'选项传递给程序时,case 's'分支根本不执行,其他任何东西都不会将number设置为值,这意味着后续读取将触发未定义的行为。(这可能比稍后读取时给您一个随机值要糟糕得多。这是一个必须修复的错误。)
但是,因为没有其他东西接触到number,它就足以改变

int number;


int number = 0;

或者你想让你的默认值是什么。
(顺便说一下,您应该使用strtol而不是atoi,因为atoi忽略语法错误。)

评论