strcat() für formatierte strings
Ich Baue einen string Stück für Stück in meinem Programm und bin derzeit mit einer Mischung von strcat (), wenn ich das hinzufügen einer einfachen Zeichenkette an das Ende, aber wenn ich das hinzufügen eines formatierten Strings bin ich mit sprintf() z.B.:
int one = 1;
sprintf(instruction + strlen(instruction), " number %d", one);
ist es möglich die Verkettung von Strings mit strcat() oder was ist die bevorzugte Methode für diese?
- Stellen Sie sicher, dass Sie genug Platz haben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Lösung funktioniert. Aufrufen von strlen ist ein wenig umständlich (vor allem wenn der string wird ziemlich lang). sprintf() wird wieder die Länge, die Sie verwendet haben [strcat nicht], also eine Sache, die Sie tun können, ist so etwas wie dieses:
Ich bin mir nicht sicher, strcat ist viel effizienter als die sprintf() ist, wenn in dieser Weise verwendet.
Edit: schreiben sollte kleiner Beispiele...
Nein, es ist nicht möglich, aber man könnte
sprintf()
auf diese einfache Zeichenfolgen und vermeiden, fordernstrlen()
jedes mal:Antwort auf die direkte Frage, sicher, es ist möglich Verwendung
strcat
Anhängen-formatierte Zeichenfolgen. Sie müssen nur zu erstellen, die formatierten string zuerst, und dann Sie können verwendenstrcat
zu Anhängen:Ausgabe:
Aber dies ist kein besonders guter Ansatz.
sprintf
funktioniert genauso gut schreiben an das Ende der vorhandenen Zeichenfolge. Sehen Fußmatte Antwort und mux Antwort für Beispiele. Die einzelnen arrays verwendet, um die einzelnen Felder sind nicht erforderlich, zumindest nicht in diesem Fall.Und da dieser code nicht verfolgen, das Ende der Zeichenfolge, die Leistung ist wahrscheinlich zu schlecht sein.
strcat(s1, s2)
ersten Scannen musss1
zu finden, die Beendigung'\0'
, und dann kopieren Sie den Inhalts2
hinein. Die anderen Antworten dies vermeiden, indem man einen index oder einen Zeiger zu verfolgen, das Ende der Zeichenfolge zimmerreserviereung, ohne das Sie berechnen es.Darüber hinaus ist der code macht keine Mühe, um Pufferüberläufe zu vermeiden.
strncat()
dies tun können, aber es schneidet nur den string, es muss Ihnen nicht sagen, dass es abgeschnitten wurde.snprintf()
ist eine gute Wahl; es gibt die Anzahl der Zeichen, die es würde geschrieben haben, wenn genug Platz zur Verfügung standen. Wenn dies überschreitet die Größe, die Sie angeben, dann wird die Zeichenfolge wurde abgeschnitten.Und Anhängen mehrere Zeichenketten (sagen wir, wenn etwas angehängt, bedingt oder wiederholt), Sie können die Methoden verwenden, die in den anderen Antworten zu verfolgen, das Ende des Ziel-string.
Also ja, es ist möglich, append-formatierte Zeichenfolgen mit
strcat()
. Es ist nur wahrscheinlich nicht eine gute Idee zu sein.Was die bevorzugte Methode ist, hängt davon ab, was Sie bereit sind zu verwenden. Anstatt das zu tun, alle diejenigen, die die manuelle (und potenziell gefährliche) string-Operationen, ich möchten, verwenden Sie die
GString
Daten-Struktur aus GLib oder GLib istg_strdup_print
Funktion. Für dein problemGString
bietet die g_string_append_printf Funktion.str_value2
ist zu groß, Sie sind verschraubt.Schreiben Sie Ihre eigenen Hülle für Ihren Bedarf.
Einen Anruf zu dieser würde so Aussehen :-
Könnte man eine Funktion definieren, wäre das kümmern, sich darum zu kümmern, wenn Sie müssen, verwenden Sie sprintf() oder strcat(). Dies ist, was die Funktion würde wie folgt Aussehen :-
Sollte es Erstens, festzustellen, welche der beiden es nennen soll(strcat oder sprintf), dann sollte es den Anruf machen, und machen es einfach für Sie, sich zu konzentrieren auf die eigentliche Logik, was Sie arbeiten!
Nur Strg+c-code oben und Strg+v in Ihre code-Basis.
Hinweis : Matt ' s Antwort ist eine gute alternative für lange strings. Aber für kurze string-Längen(<250), sollte dies tun.
Alles einfacher
Verwenden Sie es wie strcat().