Hur använder man const char* men ändå måste ändra den? C++
Jag har en liten fråga.
Jag vill utveckla mig inom C++ och skriva mindre C++ kod igenom att använda funktioner och templates. Men jag stöter på lite problem.
Jag använder ImGui för att göra grafiska applikationer i C++. Det är ett enkelt verktyg och resultatet blir väldigt bra. Men som sagt så måste man ha bra koll på minneshanteringen för arrayer.
void createCombo(const char* label, const char* items[], int length_items, const char* selected_item, int* selected_index) {
if (ImGui::BeginCombo(label, selected_item)) {
for (int i = 0; i < length_items; i++) {
bool is_selected = (selected_item == items[i]); // You can store your selection however you want, outside or inside your objects
if (ImGui::Selectable(items[i], is_selected)) {
selected_item = const_cast<char*>(items[i]);
*selected_index = i;
std::cout << selected_item << std::endl;
}
}
ImGui::EndCombo();
}
}
Problemet med denna kod är att selected_item är en konstant. I detta fall så är den initialiserad med "not selected". const betyder att jag kan ändra den i funktionen, men när jag lämnar funktionen så kommer selected_item återgå till sitt ursprungliga värde.
Med andra ord så har denna ringa effekt.
selected_item = const_cast<char*>(items[i]);
Jag får den att kopiera över data, men att kunna behålla data, fungerar absolut inte.
I detta fall anropar jag koden som
const char* baudrates_char[] = {"110", "150", "300", "600", "1200", "1800", "2400", "4800", "9600", "19200", "38400", "57600", "115200"};
const int baudrates_int[] = { 110, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200 };
static const char* baudrate_char_selected = "not selected";
int baudrate_index_selected;
createCombo("Baudrate", baudrates_char, IM_ARRAYSIZE(baudrates_char), baudrate_char_selected, &baudrate_index_selected);
IM_ARRAYSIZE är alltså lika med
IM_ARRAYSIZE(_ARR) = ((int)(sizeof(_ARR) / sizeof(*(_ARR))))
En manual hur man använder ComboBox i ImGui finns här: https://github.com/ocornut/imgui/issues/1658
Frågeställning:
Jag förstår koden och vet att när jag ändrar en const pekar-array i C++ (eller C) så kommer värdet på denna array bara vara tillfällig. Jag vill att den ska verkligen skriva över värdet till baudrate_char_selected. Hur gör man då?