c 列出没有参数的 atoi

c optarg atoi with no args

考虑以下代码:

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 变量仍然会得到一个随机值。

我在这里错过了什么? s 情况下的一些 if 语句?具体来说,我想介绍用户未在命令行参数中将特定 value/option 分配给 s 的情况。

当没有's'选项传递给程序时,根本不执行case 's'分支,也没有其他设置number为值,这意味着后续读取触发未定义的行为。 (这可能 比稍后读取时只给你一个随机值更糟糕。这是一个必须修复的错误。)

但是因为没有其他东西触及number,所以改变就足够了

int number;

int number = 0;

或您希望默认设置的任何其他内容。

(顺便说一句,你真的应该使用 strtol 而不是 atoi,因为 atoi 会忽略语法错误。)