たとえばstrncpyなら、「指定したコピー元開始位置から」「指定したコピー先開始位置へ」「指定した文字数だけ」コピーするという関数ですから、あなたの言う「指定したバイト」がコピー元コピー先いずれの場合であってもそれを指定すればいいのです。 char a[]="abcde"; char b[]="12345"; とすれば、 strncpy( &a[2],b,2); とすればaは"ab12e"となるでしょうし strncpy( a,&b[3],1); とすればaは"4bcde"、 strncpy( &a[1],&b[4],1)ならaは"a5cde"になるでしょう。 なお、abcd.abをabcde.abにするのは単純なコピーだけじゃだめです。 char str[9]="abcd.ab"; /* 増やした後の文字列が入るだけの領域が確保してあること */ char buf[4]; /* いった