strncat、_strncat_l、wcsncat、_wcsncat_l、_mbsncat、_mbsncat_lstrncat, _strncat_l, wcsncat, _wcsncat_l, _mbsncat, _mbsncat_l

文字列の文字を追加します。Appends characters of a string. これらの関数のセキュリティを強化したバージョンについては、「strncat_s、_strncat_s_l、wcsncat_s、_wcsncat_s_l、_mbsncat_s、_mbsncat_s_l」を参照してください。More secure versions of these functions are available, see strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l .

重要

_mbsncat_mbsncat_lは、Windows ランタイムで実行されるアプリケーションでは使用できません。_mbsncat and _mbsncat_l cannot be used in applications that execute in the Windows Runtime. 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。For more information, see CRT functions not supported in Universal Windows Platform apps.

構文Syntax

char *strncat(
   char *strDest,
   const char *strSource,
   size_t count
);
wchar_t *wcsncat(
   wchar_t *strDest,
   const wchar_t *strSource,
   size_t count
);
unsigned char *_mbsncat(
   unsigned char *strDest,
   const unsigned char *strSource,
   size_t count
);
unsigned char *_mbsncat_l(
   unsigned char *strDest,
   const unsigned char *strSource,
   size_t count,
   _locale_t locale
);
template <size_t size>
char *strncat(
   char (&strDest)[size],
   const char *strSource,
   size_t count
); // C++ only
template <size_t size>
wchar_t *wcsncat(
   wchar_t (&strDest)[size],
   const wchar_t *strSource,
   size_t count
); // C++ only
template <size_t size>
unsigned char *_mbsncat(
   unsigned char (&strDest)[size],
   const unsigned char *strSource,
   size_t count
); // C++ only
template <size_t size>
unsigned char *_mbsncat_l(
   unsigned char (&strDest)[size],
   const unsigned char *strSource,
   size_t count,
   _locale_t locale
); // C++ only

パラメーターParameters

strDeststrDest
NULL で終わる追加先の文字列。Null-terminated destination string.

strSourcestrSource
NULL で終わる元の文字列。Null-terminated source string.

countcount
追加する文字数。Number of characters to append.

localelocale
使用するロケール。Locale to use.

戻り値Return Value

コピー先文字列へのポインターを返します。Returns a pointer to the destination string. エラーを示す戻り値は予約されていません。No return value is reserved to indicate an error.

RemarksRemarks

Strncat関数は、 strsourceの先頭からstrsourceまでの最大文字を追加します。The strncat function appends, at most, the first count characters of strSource to strDest. Strsourceの最初の文字は、 strsourceの終端の null 文字を上書きします。The initial character of strSource overwrites the terminating null character of strDest. カウント文字を追加する前にstrsourceに null 文字が含まれている場合、 strncatは、 strsourceから null 文字までのすべての文字を追加します。If a null character appears in strSource before count characters are appended, strncat appends all characters from strSource, up to the null character. Countstrsourceの長さよりも大きい場合、 strsourceの長さはcountの代わりに使用されます。If count is greater than the length of strSource, the length of strSource is used in place of count. 結果の文字列はすべて、null 文字で終了します。The all cases, the resulting string is terminated with a null character. 重なり合う文字列間でコピーした場合の動作は未定義です。If copying takes place between strings that overlap, the behavior is undefined.

重要

strncatでは、 strdestに十分な領域があるかどうかは確認されません。そのため、バッファーオーバーランの可能性があります。strncat does not check for sufficient space in strDest; it is therefore a potential cause of buffer overruns. カウントは追加される文字数を制限することに注意してください。Strdestのサイズに制限はありません。Keep in mind that count limits the number of characters appended; it is not a limit on the size of strDest. 下記の例を参照してください。See the example below. 詳しくは、「 バッファー オーバーランの回避」をご覧ください。For more information, see Avoiding Buffer Overruns.

wcsncat_mbsncatは、 strncatのワイド文字バージョンとマルチバイト文字バージョンです。wcsncat and _mbsncat are wide-character and multibyte-character versions of strncat. Wcsncatの文字列引数と戻り値はワイド文字列です。これらの _mbsncatはマルチバイト文字列です。The string arguments and return value of wcsncat are wide-character strings; those of _mbsncat are multibyte-character strings. それ以外では、これらの関数の動作は同じです。These three functions behave identically otherwise.

出力値は、ロケールの LC_CTYPE カテゴリの設定に影響されます。詳細については、「setlocale」を参照してください。The output value is affected by the setting of the LC_CTYPE category setting of the locale; see setlocale for more information. _l サフィックスが付いていないこれらの関数のバージョンでは、このロケールに依存する動作に現在のロケールを使用します。 _l サフィックスが付いているバージョンは、渡されたロケール パラメーターを代わりに使用する点を除いて同じです。The versions of these functions without the _l suffix use the current locale for this locale-dependent behavior; the versions with the _l suffix are identical except that they use the locale parameter passed in instead. 詳細については、「 Locale」を参照してください。For more information, see Locale.

C++ では、これらの関数にテンプレートのオーバーロードがあります。In C++, these functions have template overloads. 詳細については、「 Secure Template Overloads」を参照してください。For more information, see Secure Template Overloads.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tcsncat_tcsncat strncatstrncat _mbsnbcat_mbsnbcat wcsncatwcsncat
_tcsncat_l_tcsncat_l _strncat_l_strncat_l _mbsnbcat_l_mbsnbcat_l _wcsncat_l_wcsncat_l

注意

_strncat_l_wcsncat_lはロケールに依存せず、直接呼び出すためのものではありません。_strncat_l and _wcsncat_l have no locale dependence and are not meant to be called directly. これらは、 _tcsncat_lによる内部使用のために用意されています。They are provided for internal use by _tcsncat_l.

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
strncatstrncat <string.h><string.h>
wcsncatwcsncat <string.h> または <wchar.h><string.h> or <wchar.h>
_mbsncat_mbsncat <mbstring.h><mbstring.h>
_mbsncat_l_mbsncat_l <mbstring.h><mbstring.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_strncat.c
// Use strcat and strncat to append to a string.
#include <stdlib.h>

#define MAXSTRINGLEN 39

char string[MAXSTRINGLEN+1];
// or char *string = malloc(MAXSTRINGLEN+1);

void BadAppend( char suffix[], int n )
{
   strncat( string, suffix, n );
}

void GoodAppend( char suffix[], size_t n )
{
   strncat( string, suffix, __min( n, MAXSTRINGLEN-strlen(string)) );
}

int main( void )
{
   string[0] = '\0';
   printf( "string can hold up to %d characters\n", MAXSTRINGLEN );

   strcpy( string, "This is the initial string!" );
   // concatenate up to 20 characters...
   BadAppend( "Extra text to add to the string...", 20 );
   printf( "After BadAppend :  %s (%d chars)\n", string, strlen(string) );

   strcpy( string, "This is the initial string!" );
   // concatenate up to 20 characters...
   GoodAppend( "Extra text to add to the string...", 20 );
   printf( "After GoodAppend:  %s (%d chars)\n", string, strlen(string) );
}

OutputOutput

string can hold up to 39 characters
After BadAppend :  This is the initial string!Extra text to add to (47 chars)
After GoodAppend:  This is the initial string!Extra text t (39 chars)

Badappendによってバッファーオーバーランが発生したことに注意してください。Note that BadAppend caused a buffer overrun.

関連項目See also

文字列操作String Manipulation
_mbsnbcat、_mbsnbcat_l_mbsnbcat, _mbsnbcat_l
strcat、wcscat、_mbscatstrcat, wcscat, _mbscat
strcmp、wcscmp、_mbscmpstrcmp, wcscmp, _mbscmp
strcpy、wcscpy、_mbscpystrcpy, wcscpy, _mbscpy
strncmp、wcsncmp、_mbsncmp、_mbsncmp_lstrncmp, wcsncmp, _mbsncmp, _mbsncmp_l
strncpy、_strncpy_l、wcsncpy、_wcsncpy_l、_mbsncpy、_mbsncpy_lstrncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
_strnicmp、_wcsnicmp、_mbsnicmp、_strnicmp_l、_wcsnicmp_l、_mbsnicmp_l_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strrchr、wcsrchr、_mbsrchr、_mbsrchr_lstrrchr, wcsrchr, _mbsrchr, _mbsrchr_l
_strset、_strset_l、_wcsset、_wcsset_l、_mbsset、_mbsset_l_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l
strspn、wcsspn、_mbsspn、_mbsspn_lstrspn, wcsspn, _mbsspn, _mbsspn_l
ロケールLocale
マルチバイト文字のシーケンスの解釈Interpretation of Multibyte-Character Sequences