我正在使用C ++和SDL来制作有趣的游戏。
我使用需要const char*
的TTF_RenderText将屏幕上的杀戮计数显示为表面。在我希望显示各个数字的位置之间存在空白,因此我将字符串拆分为单独的char
s。
这是我编写的用于拆分字符串并在屏幕上呈现它的代码:
SpareStream.str("");
SpareStream << Kills;
std::string KillsString = SpareStream.str();
for (int i = 0; i <= 4; i++)
{
if(i < KillsString.size())
{
std::string Cheat = KillsString.substr(i,i+1);
const char *KillsChar = Cheat.c_str();
Message = TTF_RenderText_Solid(EightBitLimit,KillsChar,White);
}
else Message = TTF_RenderText_Solid(EightBitLimit,"0",White);
ApplySurface(540 + (45 * i),(500 - HUD->h) + 24,Message,Screen);
}
然而,当杀戮计数超过100时,会发生这种情况:
显示数十和数字只显示十位数。
为什么会这样?
答案 0 :(得分:0)
从我的引用中,std :: string :: substr是:
string substr (size_t pos = 0, size_t len = npos) const;
这是一个开始/长度对,而不是开始/结束,所以你需要:
std::string Cheat = KillsString.substr(i,1);
顺便说一下,虽然开始/长度对很少用于标准库中的容器,但它们在C语言中的char *管理非常普遍,它经常出现在字符串类中。