Добавляет символы в конец строки.
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 ); |
Строка, являющаяся выходным значением с нулевым символом в конце.
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 взывает переполнение буфера. |