matrix1900 schrieb:
> nutze ich das aber in meinem programm, so meine ich das das sprintf in
> einen speicherbereich schreibt wo der scheduler der tasks arbeitet.
Abgesehen davon, das man überlegen sollte, wie sinnvoll es ist, Werte in
Textform auf eine Datei zu schreiben (das kann durchaus sinnvoll sein):
Ganz sicher nicht.
sprintf schreibt in einen Speicherbereich, dessen Adresse du angeben
musst. Wenn du sprintf einen Mist-Pointer als Speicherfläche gibst,
darfst du dich nicht wundern, wenn die sprintf alles mögliche über den
Haufen wirft.
Wenn eine Funktion in der Argumentliste einen Pointer hat, muss man
aufpassen, was dieser Pointer repräsentiert. Oft genug wird an dieser
Stelle die Adresse eines Arrays erwartet, welches groß genug sein muss
um die erzeugten Daten auch aufzunehmen
1 | int Wert1 = 5, Wert2 = 8, Wert3 = 12, Wert 4 = 3;
|
2 |
|
3 | char Zeile[40];
|
4 | sprintf( Zeile, "%d %d %d &d\n", Wert1, Wert2, Wert3, Wert4 );
|
sprintf legt in Zeile einen String an, der die Textrepräsentierung laut
Formatierstring enthält. Das Array Zeile muss groß genug sein, damit da
alles reinpasst.
Völlig falsch wäre
1 | int Wert1 = 5, Wert2 = 8, Wert3 = 12, Wert 4 = 3;
|
2 |
|
3 | char *Zeile;
|
4 | sprintf( Zeile, "%d %d %d &d\n", Wert1, Wert2, Wert3, Wert4 );
|
Der Compiler kann sich zwar nicht wehren und syntaktisch ist auch alles
korrekt, aber hinter Zeile steht kein Speicher, in den sprintf den
String schieben könnte bzw. der Zeiger zeigt irgendwo in den Speicher
und wenn sprintf dann dort den String hinschiebt, dann nüdelt es dir
klarerweise irgendwas im System nieder.