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?
-
printf
schreibt auf stdout (meist die Konsole)
sprintf
steht für string printf und schreibt in ein char-Array.
Dazu muss man auch ein Array angeben.
Diese Angabe ist beiprintf
nicht nötig.Der erste Parameter bei
printf
dient 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/
Beisprintf
musst 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
printf
ist der Formatstring.
Der erste Parameter beisprintf
ist das Ausgabearray. Der zweite ist der Formatstring.
-
Danke für den Tipp...