将整数转换为char * c ++

时间:2012-11-27 21:32:43

标签: c++ string char

这是我的函数,“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;
}

2 个答案:

答案 0 :(得分:3)

试试这个:

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

我已将变量更改为标准char而不是指针,然后使用strcat()运算符向&传递了引用。

修改

正如评论中指出的那样,这不起作用,因为&temp不是NULL终止。当我通过执行以下操作编写更多C时,我常常绕过这个。

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

当然,temp数组可以在for()循环之外声明,以获得更好的性能(理论上)。

这些都没有解决像pointer这样的代码从未被声明的其他问题。我认为对调用函数的更广泛理解是为了确定是应该在此函数中分配pointer还是由调用者传入。{/ p>

答案 1 :(得分:2)

您编写的代码将具有未定义的行为,因为pointer未初始化,并且未指向您已分配的任何有效内存(在行中保留适当长度的字母。

如果这确实是C ++,正如您所述,那么您不希望从此函数返回char*,因为这意味着您已经在该函数中分配了一个静态字符串(yuck),或者你将在该函数中动态分配字符串,调用者必须释放它(yuck)。

这些选项都不理想。

我建议一个非常简单的更改来返回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;
}