私は、元の文字列の特定の部分に部分文字列を正しく挿入する次のコードを持っています。 memcpy()
の代わりにstrcat()
を使用して同じことを行うにはどうすればよいですか? char original[]
が元の文字列である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);
}
、int start
int length
はoriginal[]
とchar toInsert[]
から除去されるサブストリングの長さは、サブストリングが挿入されている、サブストリングはで開始すべき要素です。
明確にする例:
ex。もし original[] = default string 1
、 start = 5
、 length = 6
、 toInsert[] = hello world
この例で置換されるサブストリングが 'LT STR' で5 chracters始まる、長6つの文字であるためresuling m
'は1 worlding defauhello' 等しくなります。 memcpy()
ではなく、strcat()
で同じことを行うにはどうすればよいですか?
他の制約があるかどうかによって異なります。最も簡単なのは、新しいメモリバッファを割り当て、空文字列に初期化し、元のstrncatを起動し、strncatをtoInsertにし、元のstrncatをstart + lengthから元のstrcpyに戻します。 – kaylum
'strcat()'ではなく 'strncat()'が必要です。 – EJP
BTW 'char * m = malloc(origlen - length + insertlen);' - > 'char * m = malloc(origlen - length + insertlen + 1);'そしてヌルターミネーターを忘れた。 – BLUEPIXY