报错expected ‘char **’ but argument is of type ‘char (*)[10]’
时间: 2023-07-23 17:13:51 浏览: 1520
这个错误通常出现在函数参数类型声明不匹配的情况下。在这个问题中,`char (*)[10]` 表示一个指向长度为 10 的字符数组的指针,而 `char **` 表示一个指向字符指针的指针。因此,如果你将一个 `char (*)[10]` 类型的数组传递给期望 `char **` 类型的函数,就会出现上述错误。
解决这个问题的方法是将函数参数类型改为 `char (*str)[10]`,即指向长度为 10 的字符数组的指针。这样,就可以将 `str` 数组作为参数传递给函数了。同时,为了避免数组越界,你还需要将 `result` 数组的大小改为 `61`,即 `strlen("helloworldfoobarbazqux") + 1`。修改后的代码如下:
```c
void concatenate(char (*str)[10], int n, char *result, int pos) {
if (pos == n) {
result[pos] = '\0';
printf("%s\n", result);
return;
}
for (int i = 0; i < strlen(str[pos]); i++) {
result[pos + i] = str[pos][i];
}
concatenate(str, n, result, pos + strlen(str[pos]));
}
int main() {
char str[6][10] = {"hello", "world", "foo", "bar", "baz", "qux"};
char result[61];
concatenate(str, 6, result, 0);
return 0;
}
```
这个修改后的代码应该可以正常编译和运行了。