_TRUNCATE

指定字符串截断行为。

语法

#include <stdlib.h>

备注

_TRUNCATE 在作为这些函数的 count 参数传递时启用截断行为:

strncpy_s_strncpy_s_lwcsncpy_s_wcsncpy_s_l_mbsncpy_s_mbsncpy_s_l

strncat_s_strncat_s_lwcsncat_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_lwcsncpy_s_wcsncpy_s_l_mbsncpy_s_mbsncpy_s_l

strncat_s_strncat_s_lwcsncat_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'

另请参阅

全局常量