トップページ >  C >  文字長指定して文字列コピーする
初版2003/11/27: 最終更新日2003/11/27
文字長指定して文字列コピーする
目次
文字長指定して文字列コピーする
strncpyの例
文字長指定して文字列コピーする
文字長指定して文字列コピーするには strncpy を使用します。
strncpyはstrcpyとほとんどいっしょですが、第二引数の文字列を、何バイト第一引数にコピーするかを第三引数で指定することが出来ます。
第一引数に既に文字が格納されている場合は上書きされてしまいます。

以下の例のように、yamadaという文字列が格納されている配列nameにtakaという文字列のうちの先頭2バイトだけをコピーし、 printf("%s\n",name); とするとtamadaが出力されます。
配列の中身は先頭から順に、 t、a、m、a、d、a、\0 が格納されています。
次にtamadaという文字列が格納されている配列nameにtakaという文字列のうちの4バイトだけをコピーし、 printf("%s\n",name); とするとtakadaが出力されます。
配列の中身は先頭から順に、 t、a、k、a、d、a、\0 が格納されています。
次にtakadaという文字列が格納されている配列nameにtakaという文字列のうちの5バイトだけをコピー(5バイト目には\0が格納されている)し、 printf("%s\n",name); とするとtakaが出力されます。
配列の中身は先頭から順に、 t、a、k、a、\0、a、\0 が格納されていますが、printf("%s\n",name);とすると \0 までが出力される為、takaが出力されます。

string.hをincludeする必要があります。

strncpyの例
#define ARRAY_SIZE 7

#include <stdio.h>
#include <string.h>

int main(void){

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

  strncpy(name,"taka",2);
  printf("%s\n",name);

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

  strncpy(name,"taka",4);
  printf("%s\n",name);

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

  strncpy(name,"taka",5);
  printf("%s\n",name);

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

  strncpy(name,"takashima",8);
  name[ARRAY_SIZE]='\0';
  printf("%s\n",name);

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

  return 0;
}