string mit sprintf zusammen bauen
-
ich habe folgendes problem: ich will einen dateinamen dynamisch erstellen. geht um fragen und antworten in verschiedenen versionen wo ein sound zu abgespielt werden soll der das vorliest. also meinetwegen frage 5 version 2 antwort 3 soll vorgelesen werden wird die datei answ4v1nr2.wav aufgerufen über playsound bla.
so, der dateiname sollte nun über sprintf zusammen gebaut werden. hatte es selber auf diese weise probiert:
char* soundfile=""; sprintf(soundfile,"Sound\\kla\\answ%iv%inr%i.wav", a, b, c); // a b und c sind anderswo als int deklariert un so
das ging ned. program schmiert mit dieser windoof meldung da ab (senden nicht senden gedöhns).
dann hab ich gegoogelt ob ich vllt die parameter falsch nutz und fand das hier: http://msdn2.microsoft.com/en-us/library/ybk95axf(VS.80).aspx
nach dem bsp hab ich nun das zusammenbauen wie folgt umgebaut:
char* soundfile=""; int j=0; j = sprintf( soundfile,"Sound\\kla\\answ%i", a ); j += sprintf( soundfile + j, "v%i", b ); j += sprintf( soundfile + j, "nr%i", c ); j += sprintf( soundfile + j, ".wav" );
aber da passiert wieder genau das selbe
weis einer woran das liegen kann? schreibe in c und mit visual studio 2003...
-
Schau dir mal an wie im Beispiel buffer deklariert wurde. Dann sollte dir ein Unterschied zu deinem soundfile auffallen.
Der Unterschied ist, dass für buffer wirklich 200 Byte Speicher reserviert werden, während dein soundfile nur ein Zeiger auf ein Stringliteral (eben dem leeren String "") ist. Bei solchen Stringliteralen ist es idR so, dass du auf den Speicherplatz des Literals nur lesend zugreifen darfst. Zudem wäre der "reservierte" String ja eh viel zu kurz.
-
also müsst ich rein theopraktisch einfach soundfile[50] meinetwegen draus machen? werds ma testen...
-
OMG, es funktioniert!! dank dir für die schnelle hilfe
wieder was gelernt
-
Du musst allerdings aufpassen: Es kann passieren, dass du mehr als 50 Zeichen in den Buffer "printest". Das wäre wiederum ein Problem. Klar, man könnte den Buffer größer machen. Aber das würde das eigentliche Problem nicht lösen. Dazu gibt es die Funktion snprintf(). Diese bekommt als zusätzliches Argument noch die (Rest-)Größe des Buffers übergeben. Schau dir das mal an...
Edit: Ich sehe gerade, dass du Visual Studio benutzt. Da wird man snprintf() iirc nicht finden. Das könnte man dann sprintf_s() benutzen, welches sich fast identisch verhält.
-
Tim schrieb:
Edit: Ich sehe gerade, dass du Visual Studio benutzt. Da wird man snprintf() iirc nicht finden. Das könnte man dann sprintf_s() benutzen, welches sich fast identisch verhält.
Oder _snprintf
-
Danke