У меня есть две функции для класса-оболочки Windows, через который я пытаюсь передать список аргументов с переменным числом символов * массивы
Первая:
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*);
Я вижу, что имя_элемента на самом деле "Item1"
Однако, когда я делаю то же самое во второй функции, оно item_name
указывает насовершенно другая область памяти, и я получаю некоторый мусор, подобный этому: "\ Ú ±"
Обратите внимание, что у меня все еще остается та же строка, закомментированная в первой функции, когда я делаю это.
Как правильно передать массив или строку char с переменным аргументом во вложенную функцию?
Редактировать: Я понимаю, что это не технически вложенные функции, поскольку функция 2 не определена в функции 1,Я не смог найти для него лучшего термина
Спасибо,