トップページ >  C >  文字列をコピーする
初版2003/11/25: 最終更新日2003/11/25
文字列をコピーする
目次
文字列をコピーする
strcpyの例
strcpyとmemcpyの違い
memcpyの例
文字列をコピーする
文字列をコピーするにはstrcpyを使用します。
strcpyは第二引数で与えられた文字列を第一引数の文字列にコピーしますが、第一引数に既に文字が格納されている場合は、第二引数で上書きしてしまいます。
以下の例のように、yamadaという文字列が格納されている配列nameにaaという文字列をコピーし、printf("%s¥n",name);とするとaaが出力されます。
これは文字列の終了を表す¥0もコピーされるためで、printfは¥0が表われるまで出力するという仕様のためです。
実際の配列の中身は先頭から順に、

a、a、¥0、a、d、a、¥0

が格納されています。

配列nameのサイズより大きい文字列(下の例ではaabbccdd)を配列nameにコピーした場合、 printf("%s¥n",name); とするとaabbccddが出力されます。
ただし、配列の中身は先頭から順に、 a、a、b、b、c、c、d までしか格納されません。

strcpyを使用するには、string.hをincludeする必要があります。

strcpyの例
#include <stdio.h>
#include <string.h>
int main(void){

  char name[7]="yamada";
  int i;

  strcpy(name,"aa");
  printf("%s\n",name);
  for(i=0;i<7;i++){
    printf("%c",name[i]);
  }
  printf("\n");

  strcpy(name,"aabbccdd");
  printf("%s\n",name);
  for(i=0;i<7;i++){
    printf("%c",name[i]);
  }

  return 0;
}

strcpyとmemcpyの違い
strcpyと似ている関数でmemcpyというのがあります。
strcpyは文字列のコピーである(¥0までをコピーする)ことに対して、memcpyは¥0があっても指定されたデータサイズ分をコピーします。
要するにmemcpyでは¥0もコピーしてしまいます。
そのため、memcpyは引数が3つあり、第三引数でサイズを指定する必要があります。

memcpyの例
memcpyでコピーする時は¥0もコピーされる、要するに¥0は自分で管理する必要があることに注意します。
以下は10文字コピーして最後に¥0を代入している例です。

char name[11];
memcpy(name,str,10);
name[10]=0;//ストッパー