C言語の基礎「文字列を連結する(strcat関数)」

スポンサーリンク
C言語

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

文字列の後ろに別の文字列を連結するのが、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クリエイティブ

コメント

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