0

これが私が持っている関数です。「Sprite」はプログラム内のオブジェクトであり、「GetSpriteAtPosition」は座標にある正しいスプライトへのポインターを返すだけです。

私の問題は、整数の形式で各スプライトに文字を格納することです。0 は a、25 は z で、それぞれの間にすべてのものがあります。スプライトの行の文字を提供する char* を返す関数が必要なので、プログラムでスプライトが「abcdefgh」と綴られている場合は、この関数を出力する必要があります。スプライトの 8x8 グリッドがあり、座標を正しく取得していますが、マークされた行で int を char* に変換できないというエラーが表示されます。これを機能させるにはどうすればよいですか?

前もって感謝します!

char* RowLetters(int row)
{
    char* pointer;
    for( int i = 0; i < 8; i++)
    {
        Sprite* selectedSprite = SpriteAtPosition(row*50, i * 50);
        if(selectedSprite != NULL)
        {
            char* temp = (char)(selectedSprite->Frame() + 97); //error here
            pointer = strcat(pointer, temp);
        }
        else
        {
            pointer = strcat(pointer, "test");
        }
    }
    return pointer;
}
4

2 に答える 2

3

これを試して:

        char temp = (char)(selectedSprite->Frame() + 97);
        pointer = strcat(pointer, &temp);

変数をcharポインターではなく標準に変更strcat()し、&演算子で参照を渡しました。

編集:

コメントで指摘されているように、&tempNULL で終了していないため、これは機能しません。次のようにして、より多くのCをプログラミングしたときに、これを回避していました。

        char temp[2];
        temp[0] = (char)(selectedSprite->Frame() + 97);
        temp[1] = '\0';
        pointer = strcat(pointer, temp);

もちろん、(理論上) パフォーマンスを少し向上させるために、temp配列をループの外で宣言することもできます。for()

pointerこれは、宣言されていないなど、コードに関する他の問題に対処するものではありません。pointerこの関数内で割り当てるか、呼び出し元から渡すかを決定するには、呼び出し関数をより広く理解する必要があると思います。

于 2012-11-27T21:34:24.883 に答える
2

記述されたコードpointerは、初期化されておらず、(行に適切な長さの文字を保持するために) 割り当てた有効なメモリを指していないため、未定義の動作をします。

char*あなたが述べているように、これが本当にC ++である場合、この関数からa を返したくありません.その関数と呼び出し元はそれを解放する必要があります (yuck)。

これらのオプションはどちらも理想的ではありません。

次のように、 a を返す非常に単純な変更をお勧めしstd::stringます。

std::string RowLetters(int row)
{
    std::string pointer;
    for( int i = 0; i < 8; i++)
    {
        Sprite* selectedSprite = SpriteAtPosition(row*50, i * 50);
        if(selectedSprite != NULL)
        {
            pointer.push_back((char)(selectedSprite->Frame() + 97));
        }
        else
        {
            // ???
            // pointer = strcat(pointer, "test");
        }
    }

    return pointer;
}
于 2012-11-27T21:41:06.857 に答える