_TRUNCATE
文字列の切り捨て動作を指定します。
構文
#include <stdlib.h>
解説
_TRUNCATE
が count
パラメーターとして次の関数に渡されると、切り捨て動作が有効になります。
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
_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
次の関数は、切り捨てが行われなかった場合はコピーした文字数を返し、切り捨てが行われた場合は -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'
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示