如果我使用一个结构体来携带argc和argv,我如何将地址argv赋值给结构体中的变量?
If I use a struct to carry argc and argv, how do I assign the address argv to a variable inside the structure?
我在main上面定义了一些结构:
struct arguments
{
int c;
char *v[];
};
现在我想在main:
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 << "ArrayttValuen";
cout_bar(40);
for (int i = 0; i < arg.c; i++)
{
cout << "argv[" << i << "]tt" << *arg.v[i] << endl;
}
return;
}
但是当我调用*arg.v[i]
时,程序结束时没有打印第二个参数的值或任何其他参数的值。
所以我的问题是,是否有某种方法可以使用结构体在函数之间传递,这样我就可以在另一个函数中调用arg.v[some_index < arg.c]
,通过某种方式使arg.v = argv
在main中按我的意图工作(将argv
的地址存储在arg.v
中)
所有的结构所做的就是让它,而不是必须传递argc
和argv
到一个函数,它有一个声明:void func(int &argc, char *argv[]);
我可以传递我的新结构类型与变量名arg
到一个函数声明像void func(arguments &arg)
,这基本上是所有我想要的结构。如果我不能这样做,那么我可以回到第一个方法
你需要写:
struct arguments
{
int c;
char **v;
};
现在你的main()
将工作。(这种混乱就是为什么我总是使用int main(int argc, char **argv)
,但这是个人的怪癖。)
如果你在C99或更高版本中工作,你用你的结构创建的是所谓的"灵活数组成员"(FAM),这是C99在C89(因此在c++ 98)上的一个附加项。我没注意到你在用c++工作!在C语言中有一些关于FAM的特殊规则,您不能像对灵活数组成员那样执行赋值操作。
然而,这个修复在c++中和在C中一样有效;使用FAM不一定是正确的。您是否使用支持FAM作为扩展的c++编译器?
在你的输出行,你有:
cout << "argv[" << i << "]tt" << *arg.v[i] << endl;
输出实参的第一个字符;去掉*
,你会得到第一个参数作为字符串:
cout << "argv[" << i << "]tt" << arg.v[i] << endl;
把你的struct改成this:
struct arguments
{
int c;
char **v;
};
c风格的数组和指针非常相似,你可以像你的版本或原始argv
参数一样使用上面的结构体。
int main(int argc, char **argv)
注意,在这个答案代码中,v
指向指向char的原始argv
指针数组,指针不会被复制。如果需要复制,则需要动态分配char指针数组并进行复制。
两件事:
struct arguments
{
int c;
char *v[]; /*unknown length, hence structure is incomplete*/
};
需要一个双指针,它保存着argv
struct arguments {
int c;
char **v;
};
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 包含 std::list 的结构体的 C++ 初始化
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何使用结构体的向量数组?
- 如何使用结构体在C++中更改这些代码?
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 我应该如何在C++中使用结构体解决输入失败的问题?
- Qsort() 比较结构体整数的总和
- 如何使用迭代器指向结构体c++的向量
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 如何获取结构体成员的地址
- 创建结构体向量,表达式:向量下标超出范围
- boost::任何带有结构体和无符号整数
- 如何在构造函数中初始化结构体的动态数组?
- 只写结构体的某些字段
- C++ push_back() 一个结构体到一个向量中
- C++14 结构体上的统一初始化
- 如果我使用一个结构体来携带argc和argv,我如何将地址argv赋值给结构体中的变量?