【发布时间】:2020-11-17 14:32:28
【问题描述】:
我正在阅读一本 linux 编程用 c 语言的书,它有以下代码。
int main(int argc, char *argv[])
{
int opt;
while ((opt = getopt(argc, argv, "iv")) != -1) {
switch (opt) {
case 'i':
opt_ignorecase = 1;
break;
case 'v':
opt_invert = 1;
break;
case '?':
fprintf(stderr, "Usage: %s [-iv] [<file>...]\n", argv[0]);
exit(1);
}
}
argc -= optind;
argv += optind;
}
我不明白为什么 argv += optind 有效。 当我尝试另一个程序时,如下所示:
int main(int argc, char* argv[])
{
char* test[] = {"Hello", "World", "I"};
argv += 1;
test += 1;
printf("%s", test[0]);
return 0;
}
gcc 编译器显示错误
a.c:8:9: error: assignment to expression with array type
8 | test += 1;
argv 上的 += 有效,但不适用于测试。 我不明白我做错了哪一部分..
【问题讨论】:
-
char* argv[]作为函数参数是写char** argv的不同方式。所以,它是一个指向指针的指针,test是一个指针数组
标签: c