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 невозможно использовать в приложениях, запускаемых в среде выполнения Windows.Дополнительные сведения см. в статье Функции 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 добавляет в strDest не более count первых символов из strSource. Начальный символ strSource перезаписывает конечный символ null strDest. Если нулевой символ возникает в strSource прежде, чем добавлено count символов, _strncat добавляет все символы из strSource вплоть до нуль-символа. Если count больше, чем длина strSource, длина strSource используется вместо count. Во всех случаях, результирующая строка завершается нуль-символом. Если копирование производится между перекрывающимися строками, поведение не определено.
![]() |
---|
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