无法转换' char *(*)[6]'到了#char;'争论' 2' to' void prac(int *,char ***)'

时间:2018-01-03 12:12:57

标签: c++ arrays c++11 pointers

我在编译程序时看到了这个错误:

Cannot convert 'char*(*)[6]' to 'char***' for argument '2' to 'void prac(int*,char***)'

如何修复代码?请帮帮我。

代码:

#include <iostream>
using namespace std;

void prac(int *argc, char **b[])
{
//body
//
}

int main()
{

     char *ptr_array[] = {"ssl","0.0.0.0","","tcp","0.0.0.0","8080"};
prac(&argc, &ptr_array);   

    return 0;
}

3 个答案:

答案 0 :(得分:1)

char *用于指向字符串,因为只需要第一个字符的地址,因为它们是数组的连续内存位置。
因此,对于字符串数组,它可以是一个char指针数组。又名char **b只有2而不是3.或char *b[]

#include <iostream>
using namespace std;

void prac(int *argc, char **b)
{
//body
//
}

int main(int argc, char *argv[])
{

    char *ptr_array[] = {"ssl","0.0.0.0","","tcp","0.0.0.0","8080"};
    prac(&argc, ptr_array);   

    return 0;
}

答案 1 :(得分:1)

在传递给main

的参数中已经为您呈现了答案
int main(int argc, char* argv[])

因为char* argv[]是传递给程序的命令行参数的数组。更改prac声明中的参数以匹配如此

int prac(int* argc, char* b[])

此外,您应该收到编译警告:

warning: ISO C++ forbids converting a string constant to ‘char*’

要避免将此ptr_array设置为const char*,同样设置为const char* b[]中的prac()

答案 2 :(得分:0)

第一个答案可能是你想要的。如果你真的想要发送你所显示的参数,编译器消息实际上会告诉你如何声明参数:

void prac(int *argc, char *(*b)[6])

如果您认为额外的指针层将允许prac更改阵列,那么它实际上并没有给您带来太多好处。它允许prac在main中更改argc的值,但它不能改变数组的实际大小。