strncat, _strncat_l, wcsncat, wcsncat_l, _mbsncat _mbsncat_l
追加字符串的字符。 这些功能的更安全的版本可用,请参见 strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l。
重要
_mbsncat 和 _mbsncat_l 不能在运行时的窗口执行的应用程序。有关更多信息,请参见 CRT 函数不支持与 /ZW。
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 字符。 如果 null 字符出现 strSource,在 count 字符追加之前,strncat 追加从 strSource的所有字符,到在 null 字符。 如果 count 比 strSource的长度时,strSource 的长度。count位置。 任何情况下,结果字符串停止点与 null 字符。 如果复制出现在重叠的字符串之间,该行为不确定。
安全说明 |
---|
strncat 不检查在 strDest足够的空间;因此它是缓冲区溢出的一个可能的原因。注意 count 限制追加的字符数;它不是在 strDest范围的限制。请参见下面的示例。有关更多信息,请参见 避免缓冲区溢出。 |
wcsncat 和 _mbsncat 是 strncat的宽字符和多字节字符版本。 字符串的参数和返回 wcsncat 的值是宽字符字符串;这些 _mbsncat 的多字节字符字符串。 这三个功能否则具有相同的行为。
输出值受设置 LC_CTYPE 类设置的影响区域设置;请参见 setlocale 有关更多信息。 这些功能的版本不 _l 后缀为该区域设置相关的行为使用当前区域设置;与 _l 后缀的版本相同,只不过它们使用传入的区域设置参数。 有关更多信息,请参见区域设置。
在 C++ 中,这些函数的模板超负载。 有关更多信息,请参见安全模板重载。
一般文本例程映射
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) );
}
Output
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 导致缓冲区溢出。
.NET Framework 等效项
请参见
参考
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l
_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l