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

C语言中argv输出不符合预期,请求技术排查

问题分析与修复方案

嘿,我一眼就瞅出你代码里的几个关键问题,这就是导致输出不符合预期的原因:

1. main函数的参数类型错误

你写的是int main(int argc, int **argv),但标准的命令行参数中,argv应该是字符串指针数组,也就是char **argv。int **类型和实际传入的参数类型不匹配,这会导致后续的指针操作行为未定义。

2. 指针地址的打印格式错误

你用%d来打印argv[i]的地址,但%d是用来打印十进制整数的,指针应该用%p格式符,它会以正确的格式(通常是十六进制)输出指针地址,避免因指针长度和整数长度不一致导致的错误。

3. 参数内容的打印方式错误

*argv[i]是取argv[i]这个字符串指针指向的第一个字符的ASCII值,而不是打印整个参数字符串。要打印完整的参数内容,应该直接使用argv[i],配合%s格式符。


修正后的代码

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) {  // 修正argv的类型
    int i;
    printf("argc=%d\n", argc);
    for (i = 0; i < argc; i++) {
        printf("address argv[%d] = %p\n", i, argv[i]);  // 用%p打印指针地址
        printf("value argv[%d] = %s\n", i, argv[i]);     // 用%s打印完整字符串
    }
    return 0;
}

执行./test 1 2 3的预期输出

编译运行修正后的代码,你会得到符合预期的结果:

argc=4
address argv[0] = 0x7ffee3b5b5c0  // 这个地址会因系统/环境不同而变化
value argv[0] = ./test
address argv[1] = 0x7ffee3b5b5e0
value argv[1] = 1
address argv[2] = 0x7ffee3b5b5e2
value argv[2] = 2
address argv[3] = 0x7ffee3b5b5e4
value argv[3] = 3

内容的提问来源于stack exchange,提问作者Thomas D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:06:56