_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 );
}