读书人

void main(int argc,char argv[][])这

发布时间: 2012-05-21 18:04:41 作者: rapoo

void main(int argc,char argv[][])这种参数声明方式是否正确?

C/C++ code
void main(int argc,char argv[][]){    int i;    printf("\nargc = %d",argc);    for(i=0;i<argc;i++)    printf("\nargv[%d] = %s",i,argv[i]);} 


gcc 3.4.6编译不通过,在printf那行报error: invalid use of array with unspecified bounds

vc6带的cl编译也不通过,在main那行报error C2087: '<Unknown>' : missing subscript

如果把for和printf屏蔽掉,gcc编译通过,cl还是在main那行报error C2087: '<Unknown>' : missing subscript

如果把入口参数argv[][]改为argv[][256],gcc和cl编译均可以通过,但运行结果不正确,argv[i]输出的结果不正确

我的问题是,main的入口参数到底是什么形式,怎样使用argv[][]?谢谢


[解决办法]
int main( int argc,char* argv[])
[解决办法]
char **argv

char *argv[]

[解决办法]
char [][]二维数组只能省略第一维的大小。

其实命令行传入的是char* const argv[],每一个元素是一个char*,并且这些char*不允许被修改,但char*指向的字符串允许被修改,可以自己manpage围观一下,以上写法等价于:char* const *argv,但绝对不等价于const char* *argv/const char* *argv[],也就是argv[n]是允许修改的,并不是常量字符串。
[解决办法]
正确的用法
int main( int argc,char* argv[])
或者
int main(int argc,char**argv)
[解决办法]
探讨
看各位的意思,就是不能在main的入口参数里使用argv[][]了?
在其它地方还看到说:
----------------------------
main(int argc,char **argv)
argv为指针的指针
argc为整数
char **argv or: char *argv[ ] or: char argv[ ][ ]
main()括号内是固定的写法。……

[解决办法]
探讨
to nanjingnew4
我搜了《The C Programming language》中,没有找到argv[][]这种用法啊。

[解决办法]
看compiler 支持哪种,没有什么对错

读书人网 >C语言

热点推荐