C言語の基礎「文字列をコピーする(strcpy関数)」

スポンサーリンク
C言語

前回に続いて、文字列を扱うライブラリ関数をご紹介していく。

文字列をコピーするのが、strcpy関数である。

文字列をコピーする(strcpy関数)

strcpy
ヘッダ#include<string.h>
形式char *strcpy(char * restrict s1,const char * restrict s2);
説明s2が指す文字列を、s1が指す配列にコピーする。コピー元とコピー先が重なる場合の動作は定義されない。
返却値s1が指す値を返す。

実際にプログラムで確認してみよう。

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

int main(void)
{
    char str1[] = "Good morning";
    char str2[128];
    
    strcpy(str2,str1);
	printf("str2は%sです¥n",str2);
	return 0;
}

実行結果

str2はGood morningです

コピーする文字数に制限を設けたい場合は、strncpy関数を使う。

文字列をコピーする(strncpy関数)

strncpy
ヘッダ#include<string.h>
形式char *strncpy(char * restrict s1,const char * restrict s2,size_t n);
説明s2が指す文字列を、s1が指す配列にコピーする。s2の長さがn以上の場合はn文字までコピーし、nより短い場合は残りをNULL文字で埋める。コピー元とコピー先が重なる場合の動作は定義されない。
返却値s1が指す値を返す。

実際にプログラムで確認してみよう。

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

int main(void)
{
    char s1[10];
    char *x = "xxxxxxxxx";   //9個の'x'とNULL文字
    
    strcpy(s1,x);  strncpy(s1,"12345",3);
	printf("s1 = %s¥n",s1);
	strcpy(s1,x);  strncpy(s1,"12345",5);
	printf("s1 = %s¥n",s1);
	strcpy(s1,x);  strncpy(s1,"12345",7);
	printf("s1 = %s¥n",s1);
	
	return 0;
}

実行結果

s1 = 123xxxxxx
s1 = 12345xxxx
s1 = 12345

1番目と2番目の実行例ように、コピー元文字列の長さがn以上であれば、NULL文字はコピーされない。
3番目のようにコピー元文字列の長さがn未満であれば、NULL文字で埋められる。

(参考文献)「C言語 新版 ゼロからはじめるプログラミング」 三谷 純 (著)‎ 翔泳社、
「新・明解C言語 入門編 第2版 」柴田 望洋 (著) SBクリエイティブ

コメント

タイトルとURLをコピーしました