Я работаю над игрой, и я столкнулся с какой-то странной проблемой ... Мне было интересно, сможет ли кто-нибудь здесь понять это и объяснить это мне (это меня съел!)Пустой символ * успешно конвертируется в действительный неподписанный идентификатор игры int64? КАК?
Во-первых, , вот соответствующий код.
// even if this data is not set, it returns ""
// so it's pretty much never null
// but if the function returns something,
// it will be the string representation of a 64bit unsigned int
const char* c_KickID = GetGameData("kick_member_id");
//gets my ID, works fine.
unsigned long long myID = GetMyID();
if(c_KickID != NULL)
{
//here i convert it to a unsigned 64-bit int
unsigned long long kickID;
std::stringstream ss(c_KickID);
ss >> kickID;
//now I compare the IDs...
if (myID == kickID)
{
//kick player
}
}
Игра является игровой приставкой 1 vs 1. Эта содержащая функция - это функция обратного вызова, которая запускается всякий раз, когда что-то примечательное (например, ногами игрока или началом игры). У меня есть 2 компьютера, на которых я тестирую онлайн-материал (машина Windows 7 и машина Windows XP).
В этом случае при нажатии на кнопку «Начать игру» появляется точная ошибка . Проигрыватель Windows XP будет пнут (с помощью кода выше), что указывает на то, что GetGameData("kick_member_id")
вернул свой идентификатор ... кроме этого нет.
Debugging:
- Я закомментировал код, который устанавливает «kick_member_id» значение GameData (т.е. пиная Disabled.), Чтобы убедиться - и ошибка продолжает возникать. Хозяин не пинает клиента.
- Я вывел
c_KickID
в файл и пуст (на компьютере XP нет Visual Studio, поэтому я не могу установить на нем контрольные точки, поэтому я просто выводил его содержимое в файл). - Я попытался объяснить удар игрока XP. Их идентификатор был успешно записан в выходной файл, и их выгнали, как и ожидалось.
- Я вывел
kickID
в файл, и он равенmyID
, что объясняет, почему проходитif (myID == kickID)
.
Чтобы резюмировать:
// This returns an empty char array
const char* c_KickID = GetGameData("kick_member_id");
//get my id...
unsigned long long myID = GetMyID();
//Then I run this. Keeping in mind, c_KickID is empty
unsigned long long kickID;
std::stringstream ss(c_KickID);
ss >> kickID; //<--- now kickID == myID
Итак ... при преобразовании пустого c_KickID
в unsigned long long
, он устанавливается в myID
... Как это возможно? Я полностью схожу с ума!
Я установил вопрос путем преобразования char *
в std::string
и проверки, если это пустой или нет, если он пуст, то я просто обойти этот код. Но я до сих пор не знаю, в чем проблема НАСТОЯТЕЛЬНО. Я теряю сон над этим !!!
Спасибо! Теперь я могу спокойно отдохнуть ... – Jace