怎么理解int main(int argc,char **argv)--来自NB的百度知道
提问:
1、int main(int argc,char *argv)与int main(int argc,char **argv)区别?
int main(int argc,char *argv)
argc: 整数,用来统计你运行程序时送给的命令行参数的个数
* argv: 字符串,用来存放指向你的字符串参数的,每一个元素指向一个参数
argv[0] 指向程序运行的全路径名
argv[1] 指向在DOS命令行中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
int main(int argc,char **argv) 相当于 int main(int argc,char *argv[ ] )
argc: 整数,用来统计你运行程序时送给的命令行参数的个数
* argv: 字符串,用来存放指向你的字符串参数的,每一个元素指向一个参数
argv[1] 指向在DOS命令行中执行程序名后的第一个字符串的指针
argv[2] 指向执行程序名后的第二个字符串的指针
在int main(int argc,char **argv)中 argv[1]是一个指针,存的内容是一个地址,而在int main(int argc,char
*argv)中argv[1]是一个数组元素(个人理解)
2、我看到这样的一个程序,如下:
int main(int argc, char **argv)
{
int on;
int led_no;
int fd;
if(argc != 3 ||sscanf(argv[1],"%d",&led_no) !=1 ||
sscanf(argv[2],"%d",&on) !=1 ||
on < 0 || on > 1 || led_no <0 || led_no>3)
{
fprintf(stderr,"Usage:Leds led_no 0|1\n");
exit(1);
}
其中sscanf(argv[1],"%d",&led_no) !=1不是很明白!我的理解是这样的:
argv[1]中存的是一个地址,把这个地址通过sscanf函数传递给&led_on,所以led_on就是argv[1]地址中的内容!不知道我理解的对不对!希望看到这篇文章的高手,给指点一下!
比如我输入 ./led 1 0 那么argv[1]就是指向1的指针,利用sscanf 把1的地址传给你&led_on 从而得出 led_on为1
我理解对吗?
sscanf(argv[1],"%d",&led_no)最后的&地址符号怎么理解?
回答:
唉要喂!!
1,首先矫正一下:int main(int argc, char **argv)是正确的方式。而int main(int argc, char *argv)你从哪里看来的??那是不正确的,或者是书上笔误,不要被它愚弄了。
2,你首先要弄明白一个问题, "hello world" 这个字符 常量 的返回值是什么!!
一个字符串常量的返回值是char*, 反之你也可以用char*去存取字符串。
3, 现在char **argv 就好理解了,它就是一个指向字符串的指针。 当你在终端打入 Leds led_no 0 时,argv[0]就是Leds,argv[1]就是led_no, argv[2]就是 0; 如果你熟悉数组与指针的关系,那么这里的argv[n]也容易理解, 他们都是字符串!
4,sscanf(argv[1],"%d",&led_no) !=1 这一句:sscanf不同于scanf的地方是 sscanf从一个字符串中得到输入, 而scanf是你从终端输入。 这句就是,如果argv [1]这个字符串中含数字,那么就把它读入led_on. 并返回1,否则返回0
- 提问者评价
-
非常感谢,我明白了!很感谢,这么认真地回答!
浙公网安备 33010602011771号