字符*数组参数C
我想在C函数中获取char*数组作为参数。我使用此代码:字符*数组参数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
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。不,不是。试试看