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

时间:2018-04-27 14:42:53

标签: c

#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

所以我想知道为什么?

1 个答案:

答案 0 :(得分:1)

检查main()原型。第二个论点是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 */  
} 

或者如果要按char

打印命令行参数char
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]);
}