2016-11-18 3 views
0

私は、元の文字列の特定の部分に部分文字列を正しく挿入する次のコードを持っています。 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 startint lengthoriginal[]char toInsert[]から除去されるサブストリングの長さは、サブストリングが挿入されている、サブストリングはで開始すべき要素です。

明確にする例:

ex。もし original[] = default string 1start = 5length = 6toInsert[] = hello world

この例で置換されるサブストリングが 'LT STR' で5 chracters始まる、長6つの文字であるためresuling m 'は1 worlding defauhello' 等しくなります。 memcpy()ではなく、strcat()で同じことを行うにはどうすればよいですか?

+1

他の制約があるかどうかによって異なります。最も簡単なのは、新しいメモリバッファを割り当て、空文字列に初期化し、元のstrncatを起動し、strncatをtoInsertにし、元のstrncatをstart + lengthから元のstrcpyに戻します。 – kaylum

+2

'strcat()'ではなく 'strncat()'が必要です。 – 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); 
} 
の作品は、あなたの助けありがとうございました!

関連する問題