C语言getopt参数解析程序输出错误分析:为何计算结果不符?
问题与解答
首先看这段C代码:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int main(int argc, char* argv[]) { int num; int num_set = 0; int len; int opt; while ((opt = getopt(argc, argv, "vn:o:")) >= 0) { switch (opt) { case 'v': printf("802"); break; case 'n': num_set = 1; num = atoi(optarg); printf("%i", num); break; case 'o': len = strlen(optarg); printf("%i", len); break; } } if (!num_set) { printf("0"); exit(1); } return 0; }
问题:执行命令./prog -vn 5 -o 4026时,程序的输出是什么?
你的思考漏洞
你得出的输出80254026是错误的,核心问题在于对-o选项的代码逻辑理解偏差:
- 你错误地认为程序会直接输出
-o的参数4026,但代码里明确写了对-o的处理是计算参数的字符串长度并输出长度值,也就是strlen("4026")的结果是4,只会输出4,而非4026。
正确执行流程与输出
getopt解析合并短选项-vn:先处理v选项,输出802;- 接着处理
n选项,取参数5,设置num_set=1,输出5; - 然后处理
-o选项,取参数4026,计算其长度为4,输出4; - 最后因为
num_set=1,跳过后续的printf("0"),程序正常退出。
最终输出为:80254
内容的提问来源于stack exchange,提问作者user22232153
相关产品推荐
相关产品推荐

