Sdílet prostřednictvím


strncat, _strncat_l, wcsncat, _wcsncat_l, , _mbsncat_mbsncat_l

Připojí znaky řetězce. K dispozici jsou bezpečnější verze těchto funkcí; viz , , wcsncat_s_strncat_s_l, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l.strncat_s

Důležité

_mbsncata _mbsncat_l nelze ho použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.

Syntaxe

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

Parametry

strDest
Cílový řetězec ukončený hodnotou null.

strSource
Zdrojový řetězec ukončený hodnotou null.

count
Počet znaků, které se mají připojit.

locale
Národní prostředí, které se má použít.

Vrácená hodnota

Vrátí ukazatel na cílový řetězec. Žádná návratová hodnota není vyhrazena k označení chyby.

Poznámky

Funkce strncat připojí maximálně první count znaky strSource do strDest. Počáteční znak strSource přepsání ukončující znak null znaku strDest. Pokud se před připojením znaků zobrazí strSourcecount znak null, strncat připojí všechny znaky od strSourceznaku null až do znaku null. Je-li count větší než délka strSource, délka strSource je použita místo count. Ve všech případech je výsledný řetězec ukončen znakem null. Pokud probíhá kopírování mezi řetězci, které se překrývají, chování není definováno.

Důležité

strncat nezkontroluje dostatečné místo v strDest; je tedy možnou příčinou přetečení vyrovnávací paměti. Mějte na paměti, že count omezuje počet připojených znaků, nejedná se o omezení velikosti strDest. Viz příklad níže. Další informace najdete v tématu Zabránění přetečení vyrovnávací paměti.

wcsncata _mbsncat jsou širokoznakové a vícebajtové verze .strncat Řetězcové argumenty a návratová hodnota jsou řetězce širokého znaku wcsncat . Řetězcové argumenty a návratová _mbsncat hodnota jsou řetězce s vícebajtovými znaky. Tyto tři funkce se chovají stejně jinak.

Výstupní hodnota je ovlivněna nastavením LC_CTYPE nastavení kategorie národního prostředí. Další informace najdete na webu setlocale. Verze těchto funkcí bez _l přípony používají aktuální národní prostředí pro toto chování závislé na národním prostředí. Verze s příponou _l jsou shodné s tím rozdílem, že místo toho používají parametr národního prostředí předaný. Další informace naleznete v tématu Národní prostředí.

V jazyce C++ mají tyto funkce přetížení šablon. Další informace naleznete v tématu Přetížení šablon zabezpečení.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Mapování rutin obecného textu

TCHAR.H Rutinní _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_tcsncat strncat _mbsnbcat wcsncat
_tcsncat_l _strncat_l _mbsnbcat_l _wcsncat_l

Poznámka:

_strncat_l a _wcsncat_l nemají žádnou závislost na národním prostředí a nemají být volána přímo. Jsou poskytovány pro interní použití ._tcsncat_l

Požadavky

Rutina Požadovaný hlavičkový soubor
strncat <string.h>
wcsncat <string.h> nebo <wchar.h>
_mbsncat <mbstring.h>
_mbsncat_l <mbstring.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

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

Výstup

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)

Vidíte, že BadAppend došlo k přetečení vyrovnávací paměti.

Viz také

Manipulace s řetězci
_mbsnbcat, _mbsnbcat_l
strcat, , wcscat_mbscat
strcmp, , wcscmp_mbscmp
strcpy, , wcscpy_mbscpy
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
strspn, wcsspn, , _mbsspn_mbsspn_l
Národní prostředí
Interpretace vícebajtových sekvencí znaků