Holen Sie formatierten string in eine variable

Gibt es eine C-Funktion (oder eine Möglichkeit), um eine formatierte Zeichenfolge als eine normale Zeichenfolge?

Beispiel:

printf("this is %s", "a message")

Möchte ich printf()s Ausgabe "this is a message" im char* variable. Dies sollte einfach sein, aber ich komme nicht mit etwas anderes außer schreiben es in eine Datei und Lesen Sie es oder verketten Sie so oft wie notwendig.

So ist, gibt es eine Funktion oder eine einfache Möglichkeit, um alle Strings zu einem einzigen string-variable in C?

InformationsquelleAutor tvaz | 2016-01-13

 

3 Replies
  1. 5

    Willst du entweder sprintf entweder snprintf:

    Nutzung

    char str[128];
    
    //sprintf(str, "hello %s", "world");
    snprintf(str, 128, "hello %s",  "world");

    Beachten Sie, dass snprintf ist sicherer, da es die Schnur geschnitten, um entsprechende Länge der aufgetretenen überlauf.

    Dokumentation


    Warum ist snprintf sicher

    snprintf schreibt die Ausgabe in die Zeichenkette str, die unter der Kontrolle des Formatstrings format, das angibt, wie die folgenden Argumente für die Ausgabe konvertiert werden. Es ist ähnlich wie sprintf(3), außer dass size gibt die maximale Anzahl von Zeichen zu produzieren. Die abschließenden nul-Zeichen ist für diese Begrenzung gezählt, so müssen Sie ordnen Sie mindestens size Zeichen für str.

    Wenn size null ist, wird nichts geschrieben und str kann null sein. Ansonsten Ausgabe von Zeichen über die n-1st werden verworfen, anstatt geschrieben zu str – und ein nul-Zeichen wird geschrieben am Ende der Zeichen, die tatsächlich geschrieben str. Wenn das kopieren erfolgt zwischen Objekten, die einander überlappen, ist das Verhalten undefiniert ist.

    Auf Erfolg, gibt die Anzahl der Zeichen, die hätte geschrieben hatte, die Größe war ausreichend groß, nicht eingerechnet die abschließenden nul Zeichen. So, die nul-terminierte Ausgabe wurde komplett geschrieben, wenn, und nur wenn der return-Wert ist nicht negative und weniger als die Größe. Bei einem Fehler wird -1 zurückgegeben (d.h. encoding-Fehler).

    Dass snprintf schützt Programmierer von buffer-overruns, während sprintf nicht.

    • „snprintf ist sicherer“ hmmmm, Ohne die zeigen, wie zu erkennen, eine unvollständige schreiben, char buf[8]; snprintf(buf, sizeof buf, "del %s", "c:\\junk.txt"); cmd(buf); erscheint nicht sicher
    • Alle Antworten waren gut, aber dieses war kurz, gab ein Beispiel und im Zusammenhang mit der Dokumentation. Danke!
    • das ist es, was die Dokumentation ist für. Das einzige, was Sie tun müssen, ist überprüfen Sie den Rückgabewert. „Beachten Sie, dass nur, wenn dieser zurückgegebene Wert ist nicht-negativ und kleiner als n, der string wurde komplett geschrieben.“
    • Diese Antwort erwähnt „sicherer“. Die Dokumentation nicht. IMO „sicherer“ hier ist nicht ohne demonstrieren die richtige Verwendung – daher der Kommentar.
    • kein problem, ich habe einige Erklärung (die größer ist als die Antwort selbst).
  2. 4

    Verwenden sprintf:

    sprintf( var, "this is %s", "a message" );

    Beachten Sie, dass var muss groß genug sein, um speichern Sie die endgültige Zeichenfolge (inklusive der string-terminator).

  3. 3

    Ja, die Funktion, die Sie sind lokng ist sprintf()/snprintf().

    Zitieren C11 Kapitel §7.21.6.5, Die snprintf() Funktion

    int snprintf(char * restrict s, size_t n, const char * restrict format, ...);

    Den snprintf Funktion ist äquivalent zu fprintf, außer dass der output ist geschrieben in
    ein array (über die angegebene argument s), eher ein Bach.

    Schreibt es den formatierten string in das array geliefert, die im ersten argument zu.

    FWIW, diese Funktion bedienen Sie nicht die Zuweisung (oder-Prüfung, für diese Angelegenheit) der Speicher der mitgelieferten Puffer (array). Indem Sie das array, die Sie benötigen, um sicherzustellen, dass die Ziel lange genug, um zu halten das endgültige Ergebnis.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.