У меня есть следующий код, который корректно вставляет подстроку в определенную часть исходной строки. Как я могу сделать то же самое, используя 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()
?
Это зависит от того, есть ли у вас какие-либо другие ограничения. Проще всего было бы выделить новый буфер памяти, запустить его в пустую строку, strncat оригинал, чтобы начать, strncat toInsert, strncat оригинал от начала + длины, а затем strcpy обратно в оригинал. – kaylum
Вам нужно 'strncat()', а не 'strcat()'. – EJP
BTW 'char * m = malloc (origlen - length + insertlen);' -> 'char * m = malloc (origlen - length + insertlen + 1);' и вы забыли нулевой терминатор. – BLUEPIXY