Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1411-7
Pfeil 4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
Pfeil 4.1 Formatierte Eingabe mit »scanf()«
Pfeil 4.1.1 Der Adressoperator
Pfeil 4.1.2 Probleme und deren Behandlung mit »scanf()«
Pfeil 4.1.3 Überprüfen auf das richtige Format
Pfeil 4.1.4 Zusammenfassung zu »scanf()«
Pfeil 4.2 Formatierte Ausgabe mit »printf()«


Rheinwerk Computing - Zum Seitenanfang

4.2 Formatierte Ausgabe mit »printf()« topZur vorigen Überschrift

Die Syntax von printf() sieht so aus:

#include <stdio.h>

int printf(const char * restrict format, ...);

Der Rückgabewert von printf() ist die Anzahl der Zeichen, die ausgegeben werden (ohne das Terminierungszeichen '\0'), oder im Fehlerfall EOF. Folgendes Beispiel demonstriert dies:

/* printf1.c */
#include <stdio.h>

int main(void) {
   int zeichen;
   zeichen = printf("Hallo Welt");
   printf(" enthaelt %d Zeichen\n", zeichen);  // 10 Zeichen
   return 0;
}

printf() bekommt mindestens einen Parameter, nämlich den Formatstring. Dieser Formatstring besteht wiederum aus einem Ausgabetext (Stringkonstante), der nullterminiert ist (\0), und/oder aus einer Formatanweisung.

Abbildung 4.6 »printf()«, in seine einzelnen Bestandteile zergliedert

Bei dem Formatstring handelt es sich um eine Zeichenkette beliebiger Länge. Zum Beispiel:

printf("Ich bin der Formatstring in der printf-Anweisung");

Achtung

Das mit der »beliebigen Länge« stimmt nicht ganz. Auch mit printf() kann es einen Pufferüberlauf geben, sollte der Text länger sein als erlaubt. Ein Pufferüberlauf (Buffer-Overflow) wird in Hacker-Kreisen gern verwendet, um an Root-Rechte (Rechte des Systemadministrators) zu kommen. Bei mehr als 4096 Zeichen würde printf() laut C99-Standard Probleme bekommen (bei dem C89-Standard wird es ab 512 Zeichen gefährlich). Microsoft Visual C++ verweigert außerdem bei mehr als 65.535 Zeichen die Übersetzung (Compiler-Limit).


Die Funktion printf() wird bei der Ausführung von rechts nach links abgearbeitet. Dabei sucht die Funktion nach einem Ausgabetext (Stringkonstante) und Formatanweisungen.

Diese Formatanweisung wird von printf() dann mit entsprechenden Parametern der variablen Liste ausgegeben. Formatanweisungen beginnen alle mit einem %-Zeichen. Dahinter folgt ein Buchstabe, der den Datentyp des Formates angibt. %d steht z. B. für eine dezimale Ganzzahl. Die Formatanweisung lässt sich natürlich noch erweitert formatieren.

Bevor ich die einzelnen und erweiterten Formatanweisungen vorstelle, folgt erst einmal ein Kapitel, das zeigt, was für Datentypen Sie überhaupt zur Verfügung haben.

Die Ausgabe von printf() muss übrigens nicht ausschließlich auf dem Bildschirm erfolgen. Sie können die Standardausgabe (stdout) auch in eine Datei umleiten:

/* printf2.c */
#include <stdio.h>

int main(void) {
   printf("Diese Ausgabe soll in einer Textdatei stehen\n");
   return 0;
}

Übersetzen Sie dieses Programm wie gewohnt, und starten Sie es, indem Sie in einer Konsole Folgendes eingeben (als Programmname sei hier out gegeben):

$ out > test.txt

Jetzt befindet sich im aktuellen Verzeichnis eine Datei namens test.txt mit dem Inhalt, den printf() normalerweise auf dem Bildschirm ausgegeben hätte.


Anmerkung des Autors

Sicherlich stellt sich der eine oder andere die Frage, warum ich schon zu Beginn des Kapitels auf die Schwachstellen von printf() und scanf() hingewiesen habe und dennoch auf diese Funktionen eingegangen bin. Ich habe es nur den Anfängern zuliebe getan. Zwar richtet sich dieses Buch nicht nur an Anfänger, aber würde ich gleich auf die sicheren Alternativen eingehen, so würde dies einem absoluten Einsteiger zu viel abverlangen. Ich müsste auf eine Menge Themen vorgreifen. Und wenn man schon am Anfang eines Buches auf Themen stößt, die sich vielleicht erst ein paar hundert Seiten später auflösen, dann kann dies sehr frustrierend sein.




Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: C/C++






 C/C++


Zum Rheinwerk-Shop: Einstieg in C






 Einstieg in C


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: C++ Handbuch






 C++ Handbuch


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern