Функция strncat, wcsncat, _mbsncat


Добавляет символы в конец строки.

Синтаксис

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 );
 

Параметры

strDest

Строка, являющаяся выходным значением с нулевым символом в конце.

strSource

Исходная строка с нулевым символом в конце.

count

Число символов добавляемых в конец строки.

Возвращаемые значения

Каждая из этих функций возвращает указатель на строку, являющуюся выходным значением. Возвращаемые значения не сохраняются, чтобы указать на ошибку.

Замечания

Функция strncat добавляет в конец, не менее чем, первый символ строки strSource  к строке strDest. Начальный символ strSource переписывает символ завершающего нуля в strDest.

Если в strSource нулевой символ оказывается перед параметром count,  добавленным в конец символов, функция strncat добавляет в конец все символы от strSource, до нулевого(пустого) символа.

Если параметр count больше, чем длина параметра strSource, то длина strSource используется вместо подсчета символов. Получающаяся строка завершается нулевым символом.

Если копирование делается в месте между строками, которые накладываются, поведение функции становится не определенным.

Функция wcsncat и _mbsncat - широкосимвольная и многобайтовая версии функции strncat. Параметры строки и возвращаемое значение у функции wcsncat - широкосимвольные строки, соответственно у функции _mbsncat - состоящая из многобайтовых символов строка. В противном случае эти две функции ведут себя тождественно.

Замечание по безопасности. Функция strncat не проверяет, достаточно ли места в strDest; это - следовательно, возможная причина переполнения буфера. Имейте в виду, что параметр count ограничивает число добавленных в конец символов; это не ограничение для размере strDest. См. пример ниже. Дополнительную информацию смотри в статье Уход от переполнения буфера.

Унифицированно-текстовые стандартные отображения

Процедура TCHAR.H

_UNICODE & _MBCS не определен

_MBCS определен

_UNICODE определен

_tcsncat strncat _mbsnbcat wcsncat

Пример

// crt_strncat.c

#include <stdlib.h>
#define MAXSTRINGLEN(s) ( sizeof(s)/sizeof(s[0]) - 1 )
char string[40];

void BadAppend( char suffix[], int n )
{
   strncat( string, suffix, n );
}

void GoodAppend( char suffix[], int n )
{
   strncat( string, suffix, __min( n, MAXSTRINGLEN(string)-strlen(string)) );
}

int main( void )
{
   printf( "string can hold up to %d characters\n", MAXSTRINGLEN(string) );

   strcpy( string, "This is the initial string!" );
   // объединение до 20 символов...
   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!" );
   // объединение до 20 символов...
   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 взывает переполнение буфера.