You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

正确执行流程与输出

  1. getopt解析合并短选项-vn:先处理v选项,输出802;
  2. 接着处理n选项,取参数5,设置num_set=1,输出5;
  3. 然后处理-o选项,取参数4026,计算其长度为4,输出4;
  4. 最后因为num_set=1,跳过后续的printf("0"),程序正常退出。

最终输出为:80254

内容的提问来源于stack exchange,提问作者user22232153

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:04:51