C-Bibliotheksfunktionen -sscanf()
C-Standardbibliothek - <stdio.h>
Beschreibung
C-Bibliotheksfunktionenint sscanf(const char *str, const char *format, ...)Liest formatierte Eingabe aus einer Zeichenkette.
Deklaration
Nachstehend finden Sie die Deklaration der Funktion sscanf().
int sscanf(const char *str, const char *format, ...)
Parameter
- str-- Dies ist ein C-String, aus dem die Funktion Daten abruft.
- format-- Dies ist eine C-Zeichenkette, die eines oder mehrere der folgenden Elemente enthält:Leerraumzeichen, Nicht-LeerraumzeichenundFormatbezeichner。
Der Formatbezeichner hat die Form[=%[*][width][modifiers]type=], mit ausführlicher Erklärung wie folgt:
| Parameter | Beschreibung |
|---|---|
| * | Dies ist ein optionales Sternchen, das angibt, dass die Daten aus dem Stream gelesen, aber ignoriert werden können, d. h., sie werden nicht im entsprechenden Argument gespeichert. |
| width | Dies gibt die maximale Anzahl von Zeichen an, die bei der aktuellen Leseoperation gelesen werden sollen. |
| Modifikatoren | Gibt eine andere Größe als Ganzzahl (für d, i und n), vorzeichenlose Ganzzahl (für o, u und x) oder Gleitkommazahl (für e, f und g) für die Daten an, auf die das entsprechende zusätzliche Argument zeigt: h : short int (für d, i und n), oder unsigned short int (für o, u und x) l : long int (für d, i und n), oder unsigned long int (für o, u und x), oder double (für e, f und g) L : long double (für e, f und g) |
| type | Ein Zeichen, das den Typ der zu lesenden Daten und die Art des Lesens angibt. Siehe die nächste Tabelle für Details. |
sscanf-Typspezifizierer:
| Type | Qualifizierende Eingabe | Argumenttyp |
|---|---|---|
| c | Einzelnes Zeichen: liest das nächste Zeichen. Wenn eine andere Breite als 1 angegeben wird, liest die Funktion entsprechend viele Zeichen und speichert sie an aufeinanderfolgenden Positionen des als Argument übergebenen Arrays. Am Ende wird kein Nullzeichen angehängt. | char * |
| d | Dezimalzahl: Ein Plus- oder Minuszeichen vor der Zahl ist optional. | int * |
| e,E,f,g,G | Gleitkommazahl: enthält einen Dezimalpunkt, ein optionales führendes Vorzeichen + oder -, ein optionales nachfolgendes Zeichen e oder E und Dezimalziffern. Zwei gültige Beispiele sind -732.103 und 7.12e4 | float * |
| o | Oktale Ganzzahl. | int * |
| s | String. Liest aufeinanderfolgende Zeichen, bis ein Whitespace-Zeichen angetroffen wird (Whitespace-Zeichen können Leerzeichen, Zeilenumbruch und Tabulator sein). | char * |
| u | Vorzeichenlose Dezimal-Ganzzahl. | unsigned int * |
| x,X | Hexadezimale Ganzzahl. | int * |
Zusätzliche Argumente-- Diese Funktion akzeptiert eine Reihe von Zeigern als zusätzliche Argumente, von denen jeder auf ein Objekt zeigt, dessen Typ durch das entsprechende %-Tag in der Formatzeichenfolge angegeben ist. Die Argumente stehen in derselben Reihenfolge wie die %-Tags.
Für jeden Formatbezeichner in der Formatzeichenfolge, der Daten abruft, sollte ein zusätzlicher Parameter angegeben werden. Wenn Sie das Ergebnis der sscanf-Operation in einer gewöhnlichen Variablen speichern möchten, sollten Sie den Referenzoperator (&) vor den Bezeichner setzen, zum Beispiel:
int n; sscanf (str,"%d",&n);
Rückgabewert
Bei Erfolg gibt die Funktion die Anzahl der erfolgreichen Übereinstimmungen und Zuweisungen zurück. Wenn das Ende der Datei erreicht ist oder ein Lesefehler auftritt, gibt sie EOF zurück.
Beispiel
Das folgende Beispiel demonstriert die Verwendung der Funktion sscanf().
Beispiel
#include <stdlib.h>
#include <string.h>
int main()
{
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:
March 25, 1989 = SaturdayWeitere Erweiterungen