首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无args的atoi

无args的atoi
EN

Stack Overflow用户
提问于 2016-08-06 03:03:42
回答 1查看 331关注 0票数 0

考虑以下代码:

代码语言:javascript
复制
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留空时,例如,我使用没有命令行的args启动程序,那么number变量仍然得到一个随机值。

我在这里错过了什么?在s一案中的一些if-语句?具体来说,我想讨论的情况是,用户没有在命令行参数中为s分配特定的值/选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-06 03:08:55

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

但是,因为没有任何其他与number有关的东西,所以就足以改变

代码语言:javascript
复制
int number;

代码语言:javascript
复制
int number = 0;

或者任何你想要的默认的东西。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38800145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档