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

C程序中argc传入值随机异常的技术问询

解决argc输出随机值的问题

嘿,我一眼就瞅出问题出在你的debug函数里了——你用错了可变参数对应的输出函数!

你现在的debug函数里,用fprintf(stdout, format, arg)来处理可变参数,这完全不对。因为arg是va_list类型的对象,普通的fprintf根本不知道怎么解析它,这会导致栈读取混乱,所以你看到的argc才是随机的垃圾值。

正确的做法是用专门处理可变参数的vfprintf函数,它就是为这种场景设计的。修正后的debug函数应该是这样:

void debug(char *format, ...) { 
    if(DEBUG_MODE != 0) return; 
    va_list arg; 
    va_start(arg, format); 
    // 替换成vfprintf,才能正确处理va_list参数
    (void) vfprintf(stdout, format, arg); 
    va_end(arg); 
} 

另外提个小细节:你的判断逻辑是DEBUG_MODE非0时就直接返回不输出,如果你本来想的是DEBUG_MODE为0时不输出调试信息,那这里的条件得改成if(DEBUG_MODE == 0) return;,不过这不是导致argc随机的原因,只是个逻辑小提醒。

把debug函数改成这样之后,再运行你的main函数,debug("ARGC %i\n", argc);就能正确输出实际的命令行参数个数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:55:18