附加字串字元。 這些函式已有更安全的版本可用,請參閱 strncat_s
、_strncat_s_l
、wcsncat_s
、_wcsncat_s_l
、_mbsncat_s
、_mbsncat_s_l
、。
重要
在 Windows 執行階段中執行的應用程式中無法使用 _mbsncat
和 _mbsncat_l
。 如需詳細資訊,請參閱 CRT functions not supported in Universal Windows Platform apps (通用 Windows 平台應用程式中不支援的 CRT 函式)。
語法
char *strncat(
char *strDest,
const char *strSource,
size_t count
);
wchar_t *wcsncat(
wchar_t *strDest,
const wchar_t *strSource,
size_t count
);
unsigned char *_mbsncat(
unsigned char *strDest,
const unsigned char *strSource,
size_t count
);
unsigned char *_mbsncat_l(
unsigned char *strDest,
const unsigned char *strSource,
size_t count,
_locale_t locale
);
template <size_t size>
char *strncat(
char (&strDest)[size],
const char *strSource,
size_t count
); // C++ only
template <size_t size>
wchar_t *wcsncat(
wchar_t (&strDest)[size],
const wchar_t *strSource,
size_t count
); // C++ only
template <size_t size>
unsigned char *_mbsncat(
unsigned char (&strDest)[size],
const unsigned char *strSource,
size_t count
); // C++ only
template <size_t size>
unsigned char *_mbsncat_l(
unsigned char (&strDest)[size],
const unsigned char *strSource,
size_t count,
_locale_t locale
); // C++ only
參數
strDest
以 Null 終止的目的地字串。
strSource
以 Null 結束的來源字串。
count
要附加的字元數。
locale
要使用的地區設定。
傳回值
傳回目的字元字串的指標。 未保留表示錯誤的傳回值。
備註
strncat
函式最多會將 strSource
的前 count
個字元附加至 strDest
。 strSource
的初始字元會覆寫 strDest
的終止 Null 字元。 如果在附加 count
個字元之前,strSource
中已出現 Null 字元,則 strncat
會附加 strSource
中直到 Null 字元的所有字元。 如果 count
大於 strSource
的長度,則會使用 strSource
的長度來取代 count
。 在所有案例中,產生的字串都終止於 Null 字元。 如果在重疊的字串之間執行複製,則行為是未定義的。
重要
strncat
不會檢查 strDest
中是否有足夠的空間,所以它是造成緩衝區滿溢的潛在原因。 請記住,count
會限制附加的字元數目,它不是 strDest
大小的限制。 請參閱以下範例。 如需詳細資訊,請參閱 Avoiding Buffer Overruns (避免緩衝區滿溢)。
wcsncat
和 _mbsncat
分別是 strncat
的寬字元版本和多位元組字元版本。 wcsncat
的字串引數和傳回值是寬字元字串。 _mbsncat
的字串引數和傳回值是多位元組位元元字串。 除此之外,這三個函式的行為相同。
輸出值會受到設定地區設定之 LC_CTYPE
類別設定的影響。 如需詳細資訊,請參閱setlocale
。 沒有 _l
字尾的這些函式版本,會針對與此地區設定相依的行為,使用目前的地區設定。 具有 _l
字尾的版本也一樣,只不過它們改用傳入的地區設定參數。 如需詳細資訊,請參閱 Locale。
在 C++ 中,這些函式具有範本多載。 如需詳細資訊,請參閱安全範本多載。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
一般文字常式對應
TCHAR.H 常式 |
_UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_tcsncat |
strncat |
_mbsnbcat |
wcsncat |
_tcsncat_l |
_strncat_l |
_mbsnbcat_l |
_wcsncat_l |
注意
_strncat_l
和 _wcsncat_l
沒有任何地區設定相依性,不是用於直接呼叫。 它們是提供給 _tcsncat_l
內部使用。
需求
常式 | 必要的標頭 |
---|---|
strncat |
<string.h> |
wcsncat |
<string.h> 或 <wchar.h> |
_mbsncat |
<mbstring.h> |
_mbsncat_l |
<mbstring.h> |
如需相容性詳細資訊,請參閱相容性。
範例
// crt_strncat.c
// Use strcat and strncat to append to a string.
#include <stdlib.h>
#define MAXSTRINGLEN 39
char string[MAXSTRINGLEN+1];
// or char *string = malloc(MAXSTRINGLEN+1);
void BadAppend( char suffix[], int n )
{
strncat( string, suffix, n );
}
void GoodAppend( char suffix[], size_t n )
{
strncat( string, suffix, __min( n, MAXSTRINGLEN-strlen(string)) );
}
int main( void )
{
string[0] = '\0';
printf( "string can hold up to %d characters\n", MAXSTRINGLEN );
strcpy( string, "This is the initial string!" );
// concatenate up to 20 characters...
BadAppend( "Extra text to add to the string...", 20 );
printf( "After BadAppend : %s (%d chars)\n", string, strlen(string) );
strcpy( string, "This is the initial string!" );
// concatenate up to 20 characters...
GoodAppend( "Extra text to add to the string...", 20 );
printf( "After GoodAppend: %s (%d chars)\n", string, strlen(string) );
}
輸出
string can hold up to 39 characters
After BadAppend : This is the initial string!Extra text to add to (47 chars)
After GoodAppend: This is the initial string!Extra text t (39 chars)
您可以看到 BadAppend
造成緩衝區滿溢。
另請參閱
字串操作
_mbsnbcat
??_mbsnbcat_l
},
},
},
地區設定
多位元組字元序列的解譯