Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Toxic

Frischling

  • »Toxic« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Niedersachsen

Beruf: Ingenieur

  • Private Nachricht senden

1

20.04.2009, 00:08

std::string in const char konvertieren

Gleich vorweg, normalerweise ist es nicht meine Art mit einer Frage anzukommen die man sich auch ergoogeln kann...
Aber es ist halt spät ich bin saumüde, finde irgendwie nichts und ihr wisst was ich meine.

An einer Stelle im Programm muss ich std::string in ein const char umwandeln. Ist für eine Funktion von SDL_TTF notwendig die als Parameter einen const char erwartet.

Kann mir jemand auf die schnelle sagen wie ich hier am besten konvertiere, habe schon einige Sachen ausprobiert aber es will nicht so recht werden.

Ich wollte das hier verwenden, aber als cout erhalte ich dann (null).

C-/C++-Quelltext

1
sprintf_s(chText,"%s",sWert); 
Wenn Architekten ihre Häuser so bauen würden wie Programmierer ihre Programme, könnte ein einziger Specht ganze Städte zerstören !

ph4nt0m

Frischling

Beiträge: 81

Beruf: Student

  • Private Nachricht senden

2

20.04.2009, 00:33

Du meinst sicherlich ein const char*. Die Funktion die du suchst ist std::string::c_str. Übergib der Funktion, die einen C-String erwartet also einfach text.c_str(), wenn dein std::string z.B. text heißt
;)

Toxic

Frischling

  • »Toxic« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Niedersachsen

Beruf: Ingenieur

  • Private Nachricht senden

3

20.04.2009, 09:43

Vielen Dank, das war nun wirklich sehr einfach. :D
Kannst du mir auch sagen warum das oben mit dem sprintf_s nicht geklappt hat, es wurmt mich einfach da in der Dokumentation von sprintf_s steht das man %s bei zeichenketten verwenden soll. Aber als Textausgabe erfolgt dann eben (null).
Wenn Architekten ihre Häuser so bauen würden wie Programmierer ihre Programme, könnte ein einziger Specht ganze Städte zerstören !

Peppie

Frischling

Beiträge: 18

Wohnort: Mainz!

Beruf: FIAE

  • Private Nachricht senden

4

20.04.2009, 09:53

moin,

bei der Funktion "sprintf_s" darf aber der erste Parameter kein const char* sein sondern muss entweder char* oder char variable[x], was ja demnach das gleiche ist.

Zudem musst du bei der _s Methode noch als 2. Parameter die länge des chars angeben was in deinem Beispiel fehlt ;-)


Edit: Mein Fehler, hab nicht gelesen das es um einen String geht, aber dennoch bei _s muss die länge angegeben werden ;)
http://image.ticcity.de/images/imagepool/i448.photobucket.comceb85dec.gif

5

20.04.2009, 09:53

Wenn sWert direkt der String ist, kann das nicht klappen. Die C Funktionen sind nicht gerade typsicher, deshalb versucht er einfach den String speicher als char* zu interpretieren, was dann eben schief geht.
Du müsstest also sWert.c_str() übergeben, das macht die Sache dann aber ja wieder ziemlich witzlos. Alternativ könntest du natürlich stringstreams benutzen, die geben dir ihren Inhalt aber auch nur als Strings wieder. So oder so, du musst wohl c_str() benutzen :D
Lieber dumm fragen, als dumm bleiben!

Toxic

Frischling

  • »Toxic« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Niedersachsen

Beruf: Ingenieur

  • Private Nachricht senden

6

20.04.2009, 22:10

Vielen Dank nochmal für die Erklärung :D
Ich werde aber jetzt sofern es sich einrichten lässt auch c_str() benutzen, finde ich generell auch wesentlich komfortabler. sprintf_s habe ich nur genutzt weil ich die int-Werte eines Punktezählers in char umgewandelt habe um sie so rendern zu können.
Wenn Architekten ihre Häuser so bauen würden wie Programmierer ihre Programme, könnte ein einziger Specht ganze Städte zerstören !

Werbeanzeige