C言語入門講座。関数、サンプル集を参考にして、 C言語をマスターしよう。初心者から上級者まで。

長さを指定して文字列を連結する

2012.08.10

strncat関数は、2つの文字列を長さを指定して連結します。

#include <string.h>
char *strncat(char *dest, const char *src, size_t n);

*destは連結先の文字列を指定します。
*srcは連結する文字列を指定します。*dest文字列に*src文字列を連結します。
nは連結する最大文字数を指定します。

戻り値として、第1引数*destのアドレスを返します。

*srcの長さがnより短い場合は、*srcの最後(ヌル文字)までが連結されます。また、nより長い場合は、nまで連結して、ヌル文字を付加します。

連結は*destに対して行いますので、*destは最低限「*dest自身の文字数+n+1」の大きさが必要です。

プログラム 例

#include <stdio.h>
#include <string.h>
#define STRING_MAX 51

char *StrChomp(char *);

int main()
{
  char    dest[STRING_MAX];
  char    src[STRING_MAX];
  int     cat_len;

  printf('一つ目の文字列を入力してください(50文字以下) ==> ');
  fgets(dest, STRING_MAX, stdin);
  StrChomp(dest);

  if (strlen(dest) < (STRING_MAX - 1)) {
    /* 連結可能な文字数を算出 */
    cat_len = STRING_MAX - strlen(dest) - 1;
    printf('二つ目の文字列を入力してください(%d文字以下) ==> ', cat_len);
    fgets(src, STRING_MAX, stdin);
    StrChomp(src);

    if (strlen(src) > cat_len) {
      printf('二つ目の文字列の%d文字を連結します\n', cat_len);
    }

    printf('連結結果:%s\n', strncat(dest, src, cat_len));
  }
  else {
    printf('一つ目の文字列が長すぎて連結できません\n');
  }

  return 0;
}

/* 改行削除 */
char *StrChomp(char *str)
{
  char   *str_p;;

  for (str_p = str; *str_p; ++str_p)
    ;

  if (*(str_p - 1) == '\n') {
    *(str_p - 1) = '\0';
  }

  return str;
}

例の実行結果

$ ./strncat.exe
一つ目の文字列を入力してください(50文字以下) ==> abc 123
二つ目の文字列を入力してください(43文字以下) ==> ABC 456
連結結果:abc 123ABC 456
$

関連記事