2016-11-18 2 views
0

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?

+1

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

+2

Sie brauchen 'strncat()', nicht 'strcat()'. – EJP

+2

BTW 'char * m = malloc (origlen - length + insertlen);' -> 'char * m = malloc (origlen - length + insertlen + 1);' und Du hast null-terminator vergessen. – BLUEPIXY

Antwort

0

Sie können strncat verwenden und tun dies in der unten genannten Weise. Beachten Sie jedoch, dass die unten aufgeführten Fehlerbedingungen und andere Einschränkungen, die Sie als Teil dieses Problems haben, nicht behandelt werden.

void insertString(char original[], int start, int length, char toInsert[]){ 
    size_t insertlen = strlen(toInsert); 
    size_t origlen = strlen(original); 
    size_t newBuffLen = origlen - length + insertlen + 1 
    char *m = malloc(newBuffLen); 
    memset(m, 0, newBuffLen); 
    strncat(m, original, start); 
    strncat(m, toInsert, insertlen); 
    strncat(m, original + start+ length, origlen-start-length); 
    strcpy(original,m); 
} 
0

Ich habe es mit der folgenden ersetzt und es funktioniert perfekt

void insertString(char original[], int start, int length, char toInsert[]){ 
    size_t insertlen = strlen(toInsert); 
    size_t origlen = strlen(original); 
    char holder[origlen - length + insertlen]; 
    strcpy(holder,""); 
    strncat(holder,original,start); 
    strcat(holder,toInsert); 
    strncat(holder, &original[start+length], origlen-length+insertlen); 
    strcpy(original,holder); 
} 

Vielen Dank für Ihre Hilfe!

Verwandte Themen