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
会忽略语法错误。)
考虑以下代码:
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
会忽略语法错误。)