Sdílet prostřednictvím


strncat, _strncat_l, wcsncat, wcsncat_l, _mbsncat _mbsncat_l

Připojí znaky řetězce.Bezpečnější verze těchto funkcí jsou k dispozici; viz strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l.

Důležitá poznámkaDůležité

_mbsncat a _mbsncat_l nelze použít v aplikacích, které jsou spouštěny v modulu Windows Runtime.Další informace naleznete v tématu CRT funkce nejsou podporovány s /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

Parametry

  • strDest
    Řetězec cíle zakončený hodnotou null.

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

  • count
    Počet znaků k připojení.

  • locale
    Použité národní prostředí.

Vrácená hodnota

Vrací ukazatel na cílový řetězec.Není rezervována žádná vrácená hodnota pro indikaci chyby.

Poznámky

Funkce strncat připojí maximálně prvních count znaků strSource k strDest.Úvodní bajt strSource ukončující znak null proměnné strDest.Pokud se objeví znak null v strSource předtím, než jsou znaky count připojeny, _strncat připojí všechny znaky z strSource, až po znak null.Pokud je count větší než délka strSource, délka strSource se použije namísto count.Ve všech případech je výsledný řetězec je ukončen znakem null.Pokud ke kopírování dojde mezi řetězci, které se překrývají, chování není definováno.

Poznámka k zabezpečeníPoznámka k zabezpečení

strncat nekontroluje dostatek místa v strDest. Proto jde o potenciální příčinu přetečení vyrovnávací paměti.Mějte na paměti, že count omezuje počet znaků, které jsou připojeny; nejde o omezení velikosti strDest.Viz níže uvedený příklad.Další informace naleznete v tématu Předcházení přetečení vyrovnávací paměti.

wcsncat a _mbsncat jsou širokoznaká verze a vícebajtová znaková verze strncat.Argumenty řetězce a vrácené hodnoty wcsncat jsou širokoznaké řetězce. Hodnoty _mbsncat jsou vícebajtové znakové řetězce.Tyto tři funkce se chovají identicky jinak.

Výstupní hodnota je ovlivněna nastavením kategorie LC_CTYPE národního prostředí; viz setlocale pro další informace.Verze těchto funkcí bez přípony _l 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 stejné s tím rozdílem, že používají předaný parametr národního prostředí.Další informace naleznete v tématu Národní prostředí.

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

Rutinní mapování obecného textu

Rutina TCHAR.H

_UNICODE & _MBCS není definováno

_MBCS definováno

_UNICODE definováno

_tcsncat

strncat

_mbsnbcat

wcsncat

_tcsncat_l

_strncat_l

_mbsnbcat_l

_wcsncat_l

[!POZNÁMKA]

_strncat_l a _wcsncat_l nemají žádnou závislost národního prostředí a neměly by být volány přímo.Jsou určeny pro vnitřní použití ve _tcsncat_l.

Požadavky

Rutina

Požadované záhlaví

strncat

<string.h>

wcsncat

<string.h> nebo <wchar.h>

_mbsncat

<mbstring.h>

_mbsncat_l

<mbstring.h>

Další informace o kompatibilitě naleznete 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ýsledek

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)

Všimněte si, že BadAppend způsobil přetečení vyrovnávací paměti.

Ekvivalent v rozhraní .NET Framework

System::String::Concat

Viz také

Referenční dokumentace

Zacházení s řetězci (CRT)

_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í

Výklad sekvencí vícebajtových znaků