前回に続いて、文字列を扱うライブラリ関数をご紹介していく。
文字列をコピーするのが、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クリエイティブ
コメント