文字列をコピーする
文字列をコピーするには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;//ストッパー