Agora, quando você processar uma string como "Diamante I", ela será copiada inteira, incluindo o espaço e o "I". Além disso, se algo der errado com a string de origem, o código não quebra e coloca um valor padrão.
Código:
const char* sourceString = Section.Rows[i].GetStringPtr(2);
if (sourceString != nullptr && strlen(sourceString) > 0) {
strncpy_s(this->PatentStruct[this->_Count].NamePatent,
sizeof(this->PatentStruct[this->_Count].NamePatent),
sourceString,
_TRUNCATE);
} else {
strcpy_s(this->PatentStruct[this->_Count].NamePatent,
sizeof(this->PatentStruct[this->_Count].NamePatent),
"Desconhecida");
}
void cPatent::HandlePatentCommand(int aIndex)
{
int RankIndex = this->GetRankIndex(aIndex);
if (RankIndex == -1)
{
Function.MsgUser(aIndex, 1, "| Você não possui uma Patent.");
return;
}
CUSTOM_RANKUSER_DATA CurrentPatent = this->PatentStruct[RankIndex];
bool isMaxPatent = (CurrentPatent.Max == -1);
if (isMaxPatent)
{
Function.MsgUser(aIndex, 1, "| Patent Atual: %s", CurrentPatent.NamePatent);
Function.MsgUser(aIndex, 1, "| Você já atingiu a Patent máxima.");
}
else
{
CUSTOM_RANKUSER_DATA nextPatent = this->PatentStruct[RankIndex + 1];
int PointsNeeded = nextPatent.Min - Custom[aIndex].Patent;
Function.MsgUser(aIndex, 1, "| Patent Atual: %s", CurrentPatent.NamePatent);
Function.MsgUser(aIndex, 1, "| Próxima Patent: %s", nextPatent.NamePatent);
Function.MsgUser(aIndex, 1, "| Pontos Necessários: %d.", PointsNeeded);
}
}