我在编译程序时看到了这个错误:
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;
}
答案 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的值,但它不能改变数组的实际大小。