繁体   English   中英

使用al_ustr_newf Allegro 5复制字符串

[英]Copying string with al_ustr_newf Allegro 5

我试图在游戏中排行榜,但遇到了一个无法解决的问题。 我的文本文件中包含名称字符串和带有分数的整数。 我尝试将它们复制到ALLEGRO_USTR以在屏幕上显示。

当我使用al_ustr_newf("%s", name1) ,它会复制一些随机符号。

fstream file2;
file2.open("leaderboard.txt", ios_base::in);

string name1;
string name2;
string name3;
int temp_score1;
int temp_score2;
int temp_score3;

file2 >> name1 >> temp_score1;
file2 >> name2 >> temp_score2;
file2 >> name3 >> temp_score3;

ALLEGRO_USTR * ustr_name1 = NULL;
ustr_name1 = al_ustr_newf("%s", name1);

也许还有另一种方法可以在Allegro 5中复制字符串?

来自al_ustr_newf参考

使用printf样式的格式字符串创建一个新字符串。

笔记:

“%s”说明符采用C字符串参数,而不是ALLEGRO_USTRs。 因此,要将ALLEGRO_USTR作为参数传递,您必须使用al_cstr,并且它必须是NUL终止的。 如果字符串包含嵌入式NUL字节,则从该字节开始的所有内容都将被忽略。

就是说, al_ustr_newf("%s", name1); 是未定义的行为,将遍历堆栈变量,直到找到NUL字节为止。 std::string的地址几乎永远不会与实际缓冲区的地址相同。

使用al_ustr_newf("%s", name1.c_str()); ,就像您必须使用printfstd::string

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM