将整数转换为 char* c++
Converting integers into a char* c++
这是我的函数,"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;
}
试试这个:
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] = ' ';
pointer = strcat(pointer, temp);
当然,temp
数组可以在for()
循环之外声明,以获得更好的性能(理论上)。
这些都没有解决代码的其他问题,例如从未声明pointer
。我认为对调用函数的更广泛理解是为了确定pointer
应该在此函数中分配还是由调用者传入。
编写
的代码将具有未定义的行为,因为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;
}