字符*数组参数C

字符*数组参数C,c,arrays,pointers,C,Arrays,Pointers,我想在C函数中获取char*数组作为参数。我使用此代码: void func(char* str, char *res[]) { res[0]=strstr(str,"str"); .... } int main() { char *res[6]; func(str,res); ... } 据我所知,数组作为指针发送到函数,所以我不知道为什么会出现编译错误: Argument of type char(*)[6] is incompatible with paramete

我想在C函数中获取char*数组作为参数。我使用此代码:

void func(char* str, char *res[])
{
  res[0]=strstr(str,"str");
  ....
}

int main()
{
   char *res[6];
   func(str,res);
...
}
据我所知,数组作为指针发送到函数,所以我不知道为什么会出现编译错误:

Argument of type char(*)[6] is incompatible with parameter of type char**
如何更正代码?

对于函数参数中长度为5的数组,应该执行char**ary或char*ary[5]

第一种语法将指针传递给指针,这意味着您可以在内存中放置指针数组,并将指向它的指针传递给函数。请注意,您应该在第二个参数中传递数组的长度,以便能够在其上循环。或者,您可以将数组中的最后一个指针设置为NULL,并循环直到达到该值。如果这样做,则无法传递包含空指针的数组,因为您不知道何时停止


第二种语法用于向函数传递一个固定大小的指针数组。

由于我成功编译了以下代码,您的问题恐怕出在其他地方:

void
func(char* str, char *res[])
{
}

int
main()
{
    char *res[6];

    func("test", res);

    return 0;
}
我使用以下命令编译了它:

gcc -o tmp.o -c tmp.c -Wall -Werror -pedantic

我认为形式和实际参数类型在这里是完全合法的,尽管有其他答案。

顺便说一句,strcmp的返回值为int。我认为您发布的代码不是导致错误的代码。您是对的,我编辑了它。使用gcc,您的代码可以正常编译。你用的是什么编译器?可能是他写的char-res[6];funcstr,&rest这两个语法完全相等,都不是OP所要求的。不,他们不是。第一种语法可用于传递长度为n的指针数组。对于第二种语法,编译器检查传递的数组的长度是否为5。不,不是。试试看