#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
所以我想知道为什么?
答案 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
打印命令行参数charfor (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]);
}