gpt4 book ai didi

c - 无法在 C 中输出预期的 **argv

转载 作者:行者123 更新时间:2023-11-30 21:22:54 27 4
gpt4 key购买 nike

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

int main(int argc, int **argv)
{
int i;
printf("argc=%d\n",argc);
for (i=0; i<argc; i++)
{
printf("address argv[%d] = %d\n",i,argv[i]);
printf("value argv[%d] = %d\n",i,*argv[i]);
}
return 0;
}

如果我使用可执行的 test 编译此代码,并使用 ./test 1 2 3 运行它,那么我会期望 4 个参数 (argc=4) 和 *argv[i] 打印我的输入。但它实际上输出这些:

argc=4
address argv[0] = -517119310
value argv[0] = 1818570542
address argv[1] = -517119298
value argv[1] = 3276849
address argv[2] = -517119296
value argv[2] = 3342386
address argv[3] = -517119294
value argv[3] = 1146617907

所以我想知道为什么?

最佳答案

检查main()原型(prototype)。第二个参数是 char ** 类型。

来自 n1570 部分 5.1.2.2.1

 int main(int argc, char *argv[]) {
/*..*/
}

还相应地更改 printf() 格式说明符并使用 %p 打印地址。

for (i=0; i < argc; i++) {       
printf("address argv[%d] = %p\n",i,argv[i]);
printf("value argv[%d] = %s\n",i,argv[i]); /*just remember argv[i] is char buffer, so use %s */
}

或者如果您想逐字符打印命令行参数

for (int i=0; i<argc; i++)  {
printf("address argv[%d] = %p\n",i,argv[i]);
for(int j = 0;argv[i][j];j++)
printf("value argv[%d][%d] = %c\n",i,j,argv[i][j]);
}

关于c - 无法在 C 中输出预期的 **argv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50064837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com