Probleme mit Ihrem Ansatz.
C-Strings müssen '\0'
Zeichen in 0 Byte, mit anderen Worten beenden. Die Verwendung von ""
fügt das automatisch hinzu, aber ansonsten müssen Sie es selbst hinzufügen, und alle Zeichenfolgenfunktionen hängen davon ab, dass 0 da ist.
Ihr v-Array enthält Zeichen, keine Zeichenfolgen und strcat
nimmt Zeichenfolgen.
Eine Lösung:
char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);
Dadurch wird Ihr Char-Array in ein Array von Zeigern auf C-Strings.
Es liegt auch in Ihrer Verantwortung, darauf zu achten, dass cmd[]
genügend Platz für alles enthält, was Sie mit strcat hinzufügen (hier ist es). Es ist normalerweise am besten, snprintf
zu verwenden, um Zeichenkettenverkettung zu tun, da es die Gesamtgröße des Zielarrays einschließlich, das null beendet, annimmt, und Null dort immer hinzufügt, also ist es schwieriger, durcheinander zu bringen. Beispiel mit Ihrem ursprünglichen char-Array:
char cmd[50] = "some text here";
char buf[50];
char v[] = {'a','s','d','c','b'};
snprintf(buf, sizeof buf, "%s%c", cmd, v[3]);
Hinweise: sizeof wie dies funktioniert nur, wenn buf
wirklich ein Array ist, erklärt mit []
wie hier. Auch bei Verwendung von snprintf kann die Verwendung des gleichen Puffers sowohl als Ziel als auch als Format-Argument zu unerwarteten Ergebnissen führen. Daher habe ich eine neue Zielpuffervariable hinzugefügt.
Ein weitere snprintf Beispiel mit Ihren ursprünglichen zwei Arrays nur, Anfügen von aktuellem Inhalt von cmd zu beenden:
snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);
So klar, in diesem speziellen Fall schlugen die strncat(cmd, &v[3], 1)
in anderen Antworten 1 Zeichen hinzufügen ist viel schöner, aber der Vorteil von snprintf ist, dass Sie alle von printf unterstützten Datentypen hinzufügen können, nicht chars.
Danke! Wenn ich dafür sorgen kann, dass cmd [] genügend Platz enthält, welche ist die SCHNELLSTE Methode? – redgiun
strncat ist wahrscheinlich der schnellste von diesen, aber am schnellsten ist 'int len = strlen (cmd); cmd [len] = v [3]; cmd [len + 1] = 0; '. Beachten Sie, wie die Array-Indizierung bei 0 beginnt, also ist 'some_cstring [strlen (some_cstring)]' immer 0. – hyde
danke. das war nützlich – redgiun