无法将参数'2'的'char *(*)[6]'转换为'char ***'为'void prac(int *,char ***)'(代码片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法将参数'2'的'char *(*)[6]'转换为'char ***'为'void prac(int *,char ***)'(代码片相关的知识,希望对你有一定的参考价值。

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

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;
}
答案

char *用于指向字符串,因为只需要第一个字符的地址,因为它们是数组的连续内存位置。 因此,对于字符串数组,它可以是一个char指针数组。 aka 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;
}
另一答案

在传递给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_arrayconst char*const char* b[]prac()

另一答案

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

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

如果您认为额外的指针层将允许prac更改阵列,它实际上并不会给您带来太大的影响。它允许prac在main中更改argc的值,但它不能更改数组的实际大小。

以上是关于无法将参数'2'的'char *(*)[6]'转换为'char ***'为'void prac(int *,char ***)'(代码片的主要内容,如果未能解决你的问题,请参考以下文章

java中如何将char数组转化为String?

无法将'ViewController.Type'类型的值转换为预期的参数类型'UIViewController'

npm-解析'... serify'附近的JSON输入意外结束:“最新”,“cha”

flutter error:参数类型'Future '无法分配给参数类型'小部件'

gcc:错误:选项'-mabi = aapcs-linux'中无法识别的参数

错误:对类型为'const ItemInstance'的引用无法绑定到类型为'void'的右值