main函数参数有关问题

main函数参数问题
本帖最后由 Daneill 于 2013-11-06 23:28:31 编辑
Hi,请教大家一个问题:

刚开始看到下面这个程序的时候我以为会core,为什么呢?因为++argv,最终不是会出界吗?然后对出界的数据取*不是会core吗?
书中给的解释是:argv的实参是以程序名开始,以NULL结束的。但是我打印指向NULL的地址,居然是nil,这两个有啥区别吗?为什么*nil不会core呢?
#include <stdio.h>

int main(int argc, char * argv[]) 
{
printf("%s\n", *argv);
printf("%d\n", sizeof(argv));
printf("[0] = %p, [[0]] = %s\n", argv[0], argv[0]);                                                                                                   
printf("[1] = %p, [[0]] = %s\n", argv[1], argv[1]);                                                                                                                             
     while (*++argv) {
printf("%s\n", *argv);
}
return 0;
}


命令行执行 > ./smltest 
输出
./smltest
8
[0] = 0x7fbffff89d, [[0]] = ./smltest
[1] = (nil), [[0]] = (null)
C C++ main

------解决方案--------------------
你这里的情况是 
char* p = NULL;
char** argv = &p;
这时候 你argv 得到的是指向 p的指针 &p
需要你做 *argv 才能得到 NULL
------解决方案--------------------
http://bbs.csdn.net/topics/390469280