5 Stimmen

Formatieren einer Zeichenkette in C

Normalerweise können Sie eine Zeichenkette in C wie folgt drucken.

printf("No record with name %s found\n", inputString);

Aber ich wollte eine Schnur daraus machen, wie kann ich das machen? Ich bin auf der Suche nach etwas wie dieses

char *str = ("No record with name %s found\n", inputString);

Ich hoffe, es ist klar, wonach ich suche...

30voto

James McNellis Punkte 337231

Eine Möglichkeit wäre die Verwendung von sprintf die genauso funktioniert wie printf aber nimmt als ersten Parameter einen Zeiger auf den Puffer, in dem die resultierende Zeichenkette abgelegt werden soll.

Es ist vorzuziehen, Folgendes zu verwenden snprintf die einen zusätzlichen Parameter mit der Länge des Puffers benötigt, um Pufferüberläufe zu verhindern. Zum Beispiel:

char buffer[1024];
snprintf(buffer, 1024, "No record with name %s found\n", inputString);

10voto

Benjamin Pollack Punkte 26402

Sie suchen nach dem sprintf Familie von Funktionen. Ihr allgemeines Format ist:

char output[80];
sprintf(output, "No record with name %s found\n", inputString);

Allerdings, sprintf selbst ist extrem gefährlich. Es ist anfällig für so genannte Pufferüberläufe. Das bedeutet, dass sprintf keine Ahnung hat, wie groß der output Zeichenfolge, die Sie ihm zur Verfügung stellen, ist, so dass er bereitwillig mehr Daten in sie schreibt, als verfügbar sind. Dies wird zum Beispiel sauber kompiliert, überschreibt aber gültigen Speicher - und es gibt keine Möglichkeit, die sprintf wissen, dass es etwas falsch macht:

char output[10];
sprintf(output, "%s", "This string is too long");

Die Lösung ist die Verwendung einer Funktion wie snprintf die einen Längenparameter annimmt:

char output[10];
snprintf(output, sizeof output, "%s", "This string is too long, but will be truncated");

oder, wenn Sie mit einem Windows-System arbeiten, mit dem Befehl _sntprintf Varianten und Freunde, die vor einem Überlaufen der Eingabe- oder Ausgabestrings schützen.

7voto

Remo.D Punkte 15552

Da es sich um eine Hausaufgabe handelt (danke für die Kennzeichnung als solche), schlage ich vor, dass Sie sich die ...printf() Familie von Funktionen.

Ich bin sicher, Sie werden die Lösung finden :)

3voto

Taylor Leese Punkte 48438

Schauen Sie sich sprintf an (siehe unten).

int n = sprintf(str, "No record with name %s found\n", inputString);

3voto

Cory Petosky Punkte 12051

Utilice

sprintf(str, "No record with name %s found\n", inputString);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X