gpt4 book ai didi

c++ - Variadic char 数组在嵌套函数 C++ 中显示不正确

转载 作者:行者123 更新时间:2023-11-30 03:16:02 24 4
gpt4 key购买 nike

我有两个用于 Windows 包装器类的函数,我试图通过它们传递 char* 数组的可变参数列表

第一个是:

bool OsInterface::AddDropdown(std::string menu_item_name, RECT v_location, int num_entries, ...)
{
bool ret_val = true;
va_list v_args;
va_start(v_args, num_entries);
//char* item_name = va_arg(v_args, char*);
if (!windowCreator.AddDropdown(menu_item_name, v_location, num_entries, v_args))
ret_val = false;
va_end(v_args);
return ret_val;
}

第二个是

bool WindowCreator::AddDropdown(std::string drop_down_name, RECT v_location, int num_entries, ...)
{
va_list v_args;
va_start(v_args, num_entries);
std::vector<std::string> item_names;
for(int i = 0; i < num_entries; i++)
{
char* item_name = va_arg(v_args, char*);
item_names.push_back(item_name);
}
va_end(v_args);
//Unrelated code following
}

我这样调用它:

if (!osInterface.AddDropdown("Menu_Dropdown", v_position, 1, "Item1"))

问题是:

当我取消注释第一个函数中的行时: char* item_name = va_arg(v_args, char*);

我可以看到 item_name 实际上是 "Item1"

但是,当我在第二个函数中做同样的事情时,它 item_name指向一个完全不同的内存位置,我得到了一些像这样的垃圾:"\Ú±"

请注意,当我执行此操作时,我仍然在第一个函数中注释了同一行。

如何正确地将可变参数 char 数组或字符串传递给嵌套函数?

编辑:我知道这些在技术上不是嵌套函数,因为函数 2 没有在函数 1 中定义,我找不到更好的术语来描述它

谢谢,

最佳答案

这是不正确的

bool WindowCreator::AddDropdown(std::string drop_down_name, RECT v_location, 
int num_entries, ...) {
... va_start ...
... va_arg ...
... va_end ...
}

这是正确的

bool WindowCreator::AddDropdown(std::string drop_down_name, RECT v_location, 
int num_entries, va_list v_args) {
// no va_start
... va_arg ...
// no va_end
}

参见 vprintf and friends .

话虽如此,考虑放下 C 行李并传递 std::initializer_list<std::string> 而不是处理可变参数。

关于c++ - Variadic char 数组在嵌套函数 C++ 中显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56621568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com