добрые люди, объясните пожалуйста человеческим языком что это означает:
const char* WeaponName_None = "None";
Значит ли это, что в указателе "WeaponName_None" хранится адрес памяти где должна быть сохранена строка "None", но никакой переменной с таким значеним нет? Т.е. имеется область памяти занятая данными, но не имеющая имени? Зачем?
Так и есть :)
Это указатель на строковую константу неимеющую имени :)
Это просто удобный способ создать несколько глобальных константных строк.
Если интересно, можно вот тут почитать про такие тонкости:
Перейдем на С++ и ООП будем использовать std::string объекты :)
Суть в том, что std::string - это класс (точнее даже конкретная версия шаблонного типа - std::basic_string<char>), который сам по себе кое-что умеет. Например, сам управляет памятью - сам где-то хранит char-буфер, изменяет, копирует и даже освобождает. Есть кучка вспомогательных методов, вроде поиска подстроки. К этому буферу мы напрямую даже прикоснуться не имеем права - управляем только через итераторы и методы класса.
http://www.cplusplus.com/reference/string/string/
А в Си широко используются строки с нулем на конце. То есть тупой сырой массив, где логический конец строки обозначается следующим за ней символом '\0' (от него и до конца буфера все, включая другие нуль-символы, считается мусором и игнорируется строковыми функциями).
const char cstr[] = "САБАКА-КУСАКА";
char *str = (char*)malloc((strlen(cstr) + 1)*sizeof('Ю'));
strcpy(str, cstr);
// С|А|Б|А|К|А|-|К|У|С|А|К|А|\0
const cstr2[] = "Молоко";
strcpy(str, cstr2);
// М|о|л|о|к|о|\0|К|У|С|А|К|А|\0
printf("%s", str); // Молоко
Резюме: zero-terminated string оперировать проще, т.к. это обыкновенный массив. std::string - это хитромудрая штука со своими нюансами и использованием С++ во все поля, поэтому ТС предлагает ньюби научиться пользоваться языком постепенно.
Пример о том, как работает терминальный нуль в С-строках.
1) Выделяем достаточно памяти, копируем туда данные из литерала
2) В уже имеющуюся строку копируем данные из другого литерала
3) Любуемся, как printf игнорирует любые данные после первого же '\0'.
Кстати, часто у начинающего случается ситуация, когда он велосипедит строковые операции нуль-символа не оказывается в строковом буфере. Тогда printf выйдет за границы и пойдет бродить по памяти, попутно сбрасывая свой пусть в stdout, где среди каракуль могут попадаться интересные строки, которые не были затерты после другого процесса.
Пожалуйста)