我正在进行游戏修改,但由于可能出现错误的sprintf使用,我的代码的一小部分似乎会导致游戏崩溃。
Menu& Menu::scroller(char** textArray, int* index, int numItems, bool fast) {
char buffer[60];
numItems--;
if (hovered()) {
lrInstruction = true;
fastScrolling = fast;
if (rightPress || (rightHold && fast)) {
playSound("NAV_UP_DOWN");
if (*index >= numItems) {
*index = 0;
}
else {
*index = *index + 1;
}
}
else if (leftPress || (leftHold && fast)) {
playSound("NAV_UP_DOWN");
if (*index <= 0) {
*index = numItems;
}
else {
*index = *index - 1;
}
}
}
if (hovered()) {
sprintf(buffer, "%s [%s/%s]", textArray[*index], *index, numItems);
return data(buffer);
}
return data(textArray[*index]);
}
这是我使用的原始代码,当我使用此sprintf时,由于可能错误地使用该功能而导致游戏崩溃。
当我这样做时:
sprintf(buffer, "%s", textArray[*index]);
它完美无缺。我尝试了多种类似$2%s/$3%s
的内容,但这似乎没有做到这一点。
有什么建议吗?
答案 0 :(得分:7)
&#34;%S&#34;表示打印空终止字符串,如果要打印整数使用&#34;%d&#34;。
更好的是,除非你有充分的理由不使用c ++ stringstreams,boost :: format或其他c ++类型的安全字符串格式化库。