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é
_mbsncat
a _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í strSource
count
znak null, strncat
připojí všechny znaky od strSource
znaku 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.
wcsncat
a _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 rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_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ů