_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 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應