有关"Lvalue required in function main"的疑问
程序1:
main(int argc, char *argv[]){
FILE *fr;
fr = fopen(*++argv, "r");
}
程序2:
main(){
char *argv[] = {"hello", "world!"};
printf("%s\n", *++argv);
}
问题:程序1中 *++argv 可以正常使用,但是程序2中 *++argv 编译时候报错 “Lvalue required in function main”,请问这是为什么?
新手刚进门,各位大侠多指点!谢了先~
[解决办法]
char *argv[] = {"hello", "world!"};
argv看起来是个局部变量,但由于对它进行了初始化,实际上相当于是指向某内存的一个常量指针,++argv就意味着移动这个指针,所以错误,如果:
main(){
char *argv[] = {"hello", "world!"};
char **p = argv;
printf("%s\n", *++p);
}
就不会出现错误了。
[解决办法]
注意一个是函数参数,一个是局部变量。
arg 形式看起来是一个数组,
对于数组,是无法 ++ 操作的,
所以 第二个是有问题的。
数组名作为参数传递的时候,
数组名会退化为指针,指针是可以 ++的,
所以,第一个没有问题