Grundlagen Zeichenketten
-
Hallo liebe C Experten, habe ein kleines Interpretationsproblem bei
einem einfachen C-Programm/* sprintf example */ // Analyseveränderung sprintf zu printf..... // Bedeutung der Unterschiedlichen Darstellung...? #include <stdio.h> int main () { char buffer [50]; int n, a=5, b=3; // n=printf (buffer, "%d plus %d is %d \n\n", a, b, a+b); n=sprintf (buffer, "%d plus %d is %d \n\n", a, b, a+b); printf ("%s is a string %d chars long\n",buffer,n); return 0; }Habe versucht die grundlegende Bedeutung mit einer einfachen Analyseveränderung
in Z10 mit Einsatz // und ohne erhalte Ich die Ausgaben
x��j�5 plus 3 is 8 is a string 14 chars long
mitund ohne:
5 plus 3 is 8 is a string 14 chars long
weiss jedoch nicht wo der grundlegende Unterschied der Funktion
sprintf liegt oder was sie auf der Maschinenebene anders macht ?
Hat jemand vielleicht ein besseres oder einfacheres Programm zur Hand,
welches den Unterschied von sprintf zu printf veranschaulicht?
-
printfschreibt auf stdout (meist die Konsole)
sprintfsteht für string printf und schreibt in ein char-Array.
Dazu muss man auch ein Array angeben.
Diese Angabe ist beiprintfnicht nötig.Der erste Parameter bei
printfdient als Formatstring. Und da wird halt irgendein Müll drin stehen, der dann ausgegeben wird.Mach mal in Zeile 8
char buffer [50] = "<%s> <%d+%d=%d>";
-
Jepp der Müll steht jetzt nicht mehr drin,
dafür kommt :<%d plus %d is %d > <5+3=8>5 plus 3 is 8 is a string 14 chars long
Danke
Ich glaube der grundlegende Unterschied ist, dass sich die Funktion sprintf direkt auf ein Array bezieht, welches in der Syntax mit
(buffer,"%d....
dem Namen des Feldes angesteuert wird. Es geht darum den Inhalt des Arrays
auszugeben...
-
softpad schrieb:
Ich glaube der grundlegende Unterschied ist, dass sich die Funktion sprintf direkt auf ein Array bezieht, welches in der Syntax mit
(buffer,"%d....
dem Namen des Feldes angesteuert wird. Es geht darum den Inhalt des Arrays
auszugeben...Da brauchst du nichts zu glauben. Das kannst du wissen, indem du mal die Referenzen zu den Funktionen durchliest. Z.B da: http://www.cplusplus.com/reference/cstdio/printf/
Beisprintfmusst du noch ein Array angeben, in dem die Ausgabe erfolgt.printf ("%d plus %d is %d \n\n", a, b, a+b); // kein buffer n=sprintf (buffer, "%d plus %d is %d \n\n", a, b, a+b);Der erste Parameter bei
printfist der Formatstring.
Der erste Parameter beisprintfist das Ausgabearray. Der zweite ist der Formatstring.
-
Danke für den Tipp...