有3个参数的Sprintf不起作用

时间:2018-03-06 18:42:04

标签: c++ printf

我正在进行游戏修改,但由于可能出现错误的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的内容,但这似乎没有做到这一点。

有什么建议吗?

1 个答案:

答案 0 :(得分:7)

&#34;%S&#34;表示打印空终止字符串,如果要打印整数使用&#34;%d&#34;。

更好的是,除非你有充分的理由不使用c ++ stringstreams,boost :: format或其他c ++类型的安全字符串格式化库。