Ich habe den folgenden Code, der richtig funktioniert, eine Teilzeichenfolge in einen bestimmten Teil der ursprünglichen Zeichenfolge einfügen. Wie kann ich dasselbe mit strcat()
anstelle von memcpy()
machen?Wie kann ich memcpy() durch ein äquivalentes strcat() ersetzen?
void insertString(char original[], int start, int length, char toInsert[]){
size_t insertlen = strlen(toInsert);
size_t origlen = strlen(original);
char *m = malloc(origlen - length + insertlen);
memcpy(m, &original[0], start);
memcpy(m+start, &toInsert[0], insertlen);
memcpy(m+start+insertlen, &original[start+length], origlen-length+insertlen);
strcpy(original,m);
}
char original[]
Wo die ursprüngliche Zeichenfolge ist, int start
ist das Element, das der Teil an beginnen sollte, int length
ist die Länge der Teilkette aus original[]
char toInsert[]
und entfernt wird, ist die Teilkette eingefügt wird.
Beispiel zur Verdeutlichung:
ex. wenn original[] = default string 1
, start = 5
, length = 6
, toInsert[] = hello world
die resuling m
entspräche 'defauhello weltenden 1', da die Teilkette in diesem Beispiel ersetzt ist 'lt str' beginnend bei 5 chracters in und 6 Zeichen lang. Wie kann ich dasselbe mit strcat()
anstelle von memcpy()
machen?
Es hängt davon ab, ob Sie andere Einschränkungen haben. Am einfachsten wäre es, einen neuen Speicherpuffer zuzuweisen, ihn zu einer leeren Zeichenfolge zu initalisieren, das Original hochzufahren, um es zu starten, strncat das toInsert, strncat das Original von Start + Länge und dann zurück ins Original. – kaylum
Sie brauchen 'strncat()', nicht 'strcat()'. – EJP
BTW 'char * m = malloc (origlen - length + insertlen);' -> 'char * m = malloc (origlen - length + insertlen + 1);' und Du hast null-terminator vergessen. – BLUEPIXY