_TRUNCATE

文字列の切り捨て動作を指定します。

構文

#include <stdlib.h>

解説

_TRUNCATEcount パラメーターとして次の関数に渡されると、切り捨て動作が有効になります。

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l

strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l

mbstowcs_s, _mbstowcs_s_l

mbsrtowcs_s

wcstombs_s, _wcstombs_s_l

wcsrtombs_s

_snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l

vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l

コピー先バッファーが小さすぎて文字列全体を保持できません。これらの関数の通常の動作は、それをエラー状態として扱うことです (「パラメーターの検証」を参照)。 ただし、_TRUNCATE を渡すことで文字列の切り捨てが有効になっている場合は、これらの関数はコピー先バッファーが null で終わるようにしながら、バッファーに収まる限りの文字列のみをコピーし、正常終了の値を返します。

文字列の切り捨てにより、関係する関数の戻り値が変わります。 次の関数は、切り捨てが行われなかった場合は 0 を返し、切り捨てが行われた場合は STRUNCATE を返します。

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l

strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l

wcstombs_s, _wcstombs_s_l

mbstowcs_s, _mbstowcs_s_l

次の関数は、切り捨てが行われなかった場合はコピーした文字数を返し、切り捨てが行われた場合は -1 を返します (元の snprintf 関数の動作と一致)。

_snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l

vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l

// crt_truncate.c
#include <stdlib.h>
#include <errno.h>

int main()
{
   char src[] = "1234567890";
   char dst[5];
   errno_t err = strncpy_s(dst, _countof(dst), src, _TRUNCATE);
   if ( err == STRUNCATE )
      printf( "truncation occurred!\n" );
   printf( "'%s'\n", dst );
}
truncation occurred!
'1234'

関連項目

グローバル定数