前回に続いて、文字列を扱うライブラリ関数をご紹介していく。
文字列の後ろに別の文字列を連結するのが、strcat関数である。
strcat | |
ヘッダ | #include <string.h> |
形式 | char *strcat(char * restrict s1,const char * restrict s2); |
説明 | s2が指す文字列を、s1が指す文字列の末尾に連結する。コピー元とコピー先が重なる場合の動作は定義されない。 |
返却値 | s1が指す値を返す。 |
実際にプログラムで確認してみよう。
#include <stdio.h>
#include <string.h>
int main(void)
{
char s1[10];
char *x = "ABC";
strcpy(s1,x); strcat(s1,"DEF");
printf("s1 = %s¥n",s1);
return 0;
}
実行結果
s1 = ABCDEF
連結する文字数に制限を設けたい場合は、strncat関数を使う。
strncat | |
ヘッダ | #include <string.h> |
形式 | char *strncat(char * restrict s1,const char * restrict s2,size_t n); |
説明 | s2が指す文字列を、s1が指す文字列の末尾に連結する。s2の長さがnより長い場合は、切り捨てる。コピー元とコピー先が重なる場合の動作は定義されない。 |
返却値 | s1が指す値を返す。 |
実際にプログラムで確認してみよう。
#include <stdio.h>
#include <string.h>
int main(void)
{
char s1[10];
char *x = "ABC";
strcpy(s1,x); strncat(s1,"12345",3);
printf("s1 = %s¥n",s1);
strcpy(s1,x); strncat(s1,"12345",5);
printf("s1 = %s¥n",s1);
strcpy(s1,x); strncat(s1,"12345",7);
printf("s1 = %s¥n",s1);
return 0;
}
実行結果
s1 = ABC123
s1 = ABC12345
s1 = ABC12345
1番目の実行例は、文字列s2の長さがnより長い場合は、先頭のn文字のみが連結される。末尾のNULL文字も連結されるので、実質4文字連結される。
2番目や3番目のようにs2の長さがn以下であれば、末尾のNULL文字も含め、文字列s2のすべてを連結する。
(参考文献)「C言語 新版 ゼロからはじめるプログラミング」 三谷 純 (著) 翔泳社、
「新・明解C言語 入門編 第2版 」柴田 望洋 (著) SBクリエイティブ
コメント