2016-11-18 8 views
0

У меня есть следующий код, который корректно вставляет подстроку в определенную часть исходной строки. Как я могу сделать то же самое, используя strcat() вместо memcpy()?Как заменить memcpy() эквивалентным strcat()?

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[] Где это исходная строка, int start является элементом, который подстрока должна начинаться, int length длина подстроки удаляется из original[] и char toInsert[] является подстроки вставлена.

Пример:

ex. если original[] = default string 1, start = 5, length = 6, toInsert[] = hello world

resuling m будет равна «defauhello worlding 1», так как подстроки заменяется в этом примере является «л ул», начиная с 5 chracters в и имеет длину 6 символов. Как я могу сделать то же самое с strcat() вместо memcpy()?

+1

Это зависит от того, есть ли у вас какие-либо другие ограничения. Проще всего было бы выделить новый буфер памяти, запустить его в пустую строку, strncat оригинал, чтобы начать, strncat toInsert, strncat оригинал от начала + длины, а затем strcpy обратно в оригинал. – kaylum

+2

Вам нужно 'strncat()', а не 'strcat()'. – EJP

+2

BTW 'char * m = malloc (origlen - length + insertlen);' -> 'char * m = malloc (origlen - length + insertlen + 1);' и вы забыли нулевой терминатор. – BLUEPIXY

ответ

0

Вы можете использовать strncat и сделать это ниже. Но, пожалуйста, обратите внимание, что нижеследующее не обрабатывает условия ошибки и другие ограничения, которые у вас есть как часть этой проблемы.

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

я заменил его следующим, и он прекрасно работает

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); 
} 

Спасибо всем за помощь!

 Смежные вопросы

  • Нет связанных вопросов^_^