以下代码,为何main函数体中的char *ab[]在visual studio中不能申明,说是unknown size。难道一定要设定字符串数组的边界么?为何char* argv[]就行?
void pr(char * a)
{
printf("inprintfs:%s\n",a);
}
void main(int argc, char * argv[])
{
char *ab[];
*(ab+1)="abc1";
ab[2]="abc2";
pr(ab[2]);
}
首先 char*ab[]是个数组,数组当然要有个数了。然后char*argv[]实际上是个指针。在c中函数的参数不管是数组还是指针都是按指针类型处理的argv实际上是实际上是指向数组的指针。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-07-15
数组必须声明其大小 或者 char* ab[] = "abc",会默认大小为3+1(字符串结束符)。
argc 为你传入main函数的参数的个数 一般为1 比如 运行a.out文件 。/a.out 这时argc为1。
argv是一个指针数组 保存你输入的参数 以./a.out为例,*argv[0]="./a.out"
argc 为你传入main函数的参数的个数 一般为1 比如 运行a.out文件 。/a.out 这时argc为1。
argv是一个指针数组 保存你输入的参数 以./a.out为例,*argv[0]="./a.out"
第2个回答 2011-07-15
s数组长度 == p所指向的字符串长度 1 (1就是
第3个回答 2011-07-15
char* argv[]是在参数里,实际上就是个char **argv。在参数里你想指定长度都不行。或者说就算你写char argv[100],这个100也无法被函数所得知。
简单说来就是:
在函数参数中的char *argv[]之类是从外界将已经定义好(已经开辟内存)的变量的首地址传入,编译器不知道也不用知道数组有多长
但在函数内部,char *argv[100]之类写法是在定义变量,为了让编译器知道需要多大的内存,比如明确指定其长度本回答被提问者采纳
简单说来就是:
在函数参数中的char *argv[]之类是从外界将已经定义好(已经开辟内存)的变量的首地址传入,编译器不知道也不用知道数组有多长
但在函数内部,char *argv[100]之类写法是在定义变量,为了让编译器知道需要多大的内存,比如明确指定其长度本回答被提问者采纳