我在 main 之上定义了一些结构:
struct arguments
{
int c;
char *v[];
};
现在我想主要这样做:
int main(int argc, char *argv[])
{
arguments arg;
arg.c = argc;
arg.v = argv; /* error: incompatible types in assignment of 'char** to char* [0]' */
}
所以,我不完全理解我在做什么,但本能地我重新制作了结构,char *v[];
但是char **v[];
,这意味着当我通过引用我的结构arg
时,如果我想取消引用并获取 的值arg.v[0]
,这将是程序名称,我现在必须这样做*arg.v[0]
,这不再适用于*arg.v[1]
.
我有一个功能,例如:
void argument_reader(arguments &arg)
{
cout << "Number of arguments: " << arg.c << endl << endl;
cout << "Array\t\tValue\n";
cout_bar(40);
for (int i = 0; i < arg.c; i++)
{
cout << "argv[" << i << "]\t\t" << *arg.v[i] << endl;
}
return;
}
但是当我调用*arg.v[i]
程序结束时没有打印第二个参数或任何其他参数的值。
所以我的问题是,有没有什么方法可以使用结构在函数之间传递,这样我就可以arg.v[some_index < arg.c]
在另一个函数内部调用,方法是按照我的意图使线路arg.v = argv
在 main 工作中(存储argv
in的地址arg.v
)
结构所做的一切就是使它不必传递argc
和传递argv
给具有如下声明的函数:void func(int &argc, char *argv[]);
我可以将具有变量名的新结构类型传递arg
给声明为类似的函数void func(arguments &arg)
,这基本上就是我想要的结构. 所以如果我不能这样做,那么我可以回到第一种方法。