请问高手有关 char* argv[]

来源:百度知道 编辑:UC知道 时间:2024/05/25 18:56:15
1 #include "stdafx.h"

2 int main(int argc, char* argv[])
{
3 printf("Hello World!\n");

4 printf(argv[1]);
5 printf(*argv[1]);
return 0;
}
编译结果:

D:\ad\ad.cpp(11) : error C2664: 'printf' : cannot convert parameter 1 from 'char' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.
Creating browse info file...

ad.exe - 1 error(s), 0 warning(s)

我去掉第5行就能通过
假设这个程序的名字为aa我在命令行输入aa jjj kkk
执行结果: Hello World! jjj
我想既然argv[]是个指针数组为什么argv[1]的内容是jjj 而不是(*argv[1]) 为什么我不能printf(*argv[1]);那么(*argv[1])的内容又是什么??????

如果回答的相当好我会再加10分
我知道printf("%s ",argv[2]); 打出 jjj (位置参数 2)
我想问的是printf("%s ",*argv[2])是什么?
既然argv[2]是jjj为什么main函数定义时定义成int main(int argc, char* argv[]

char *argv[] -- 主函数的参数

argv[1] 是 字符变量(命令行位置参数1,不是字符常量),所以 printf 里要添输出格式 "%s":

printf("%s ",argv[1]);

命令行若是:
ad.exe aa jjj kkk

printf("%d ",argc); 打出4 -- 位置参数总个数
printf("%s ",argv[0]); 打出 ad.exe (程序名是 位置参数0)
printf("%s ",argv[1]); 打出 aa (位置参数 1)
printf("%s ",argv[2]); 打出 jjj (位置参数 2)
printf("%s ",argv[3]); 打出 kkk (位置参数 3)

应当这样理解,你把输入的命令个数看做字符数组,如 ping -r destion.里面有三个命令数,则数组argv[i](i=0;i<3)分别把这三个命令存起来了,但是我们知道argv[i]它代表一个数组的首地址,但是他自己也有一个存储位置(即他自己的地址),所以就存在 *argv[],其实在函数中写的时候可以这样写argv[i][j],第i个数组中的第几个字符,如argv[0][1]则表示命令中ping的i字符,明白了吗

printf("%s",*argv[2]) 因为*argv[2]是一个字符。所以%s应该改成%c,结果是第二个参数的第一个字符。