2016-05-27 4 views
0

Ich habe versucht, eine Rangliste in meinem Spiel zu machen, aber ich habe ein Problem festgestellt, das ich nicht herausfinden kann. Ich habe Zeichenfolgen mit Namen und Ganzzahlen mit Punktzahl aus meiner Textdatei. Ich versuche, sie auf ALLEGRO_USTR zu kopieren, um es auf dem Bildschirm zu zeigen.String kopieren mit al_ustr_newf Allegro 5

Wenn ich al_ustr_newf("%s", name1) verwende, kopiert es einige zufällige Zeichen.

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); 

Vielleicht gibt es eine andere Möglichkeit, Strings in allegro 5 zu kopieren?

Antwort

0

Von al_ustr_newf reference:

Erstellen Sie eine neue Zeichenfolge ein printf-Stil Format-String verwendet wird.

Hinweise:

Die "% s" Spezifizierer nimmt String-Argumente C, nicht ALLEGRO_USTRs. Um also einen ALLEGRO_USTR als Parameter zu übergeben, müssen Sie al_cstr verwenden und NUL muss terminiert sein. Wenn die Zeichenfolge ein eingebettetes NUL-Byte enthält, wird alles von diesem Byte an ignoriert.

Davon abgesehen, ist al_ustr_newf("%s", name1); undefiniertes Verhalten, durch Variablen Ihres Stack laufen, bis es einen NUL Byte findet. Die Adresse std::string entspricht fast nie einer Adresse des aktuellen Puffers.

Verwenden Sie al_ustr_newf("%s", name1.c_str());, genau wie mit printf und std::string.

+0

Vielen Dank! Es funktioniert jetzt wie ich es mir gewünscht habe :) – P3piK

Verwandte Themen