strncat, , _strncat_l, wcsncat, _wcsncat_l, , _mbsncat_mbsncat_l

Dołącza znaki ciągu. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz , , _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l.strncat_s

Ważne

_mbsncati _mbsncat_l nie można ich używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.

Składnia

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
Ciąg docelowy zakończony wartością null.

strSource
Ciąg źródłowy zakończony wartością null.

count
Liczba znaków do dołączenia.

locale
Ustawienia regionalne do użycia.

Wartość zwracana

Zwraca wskaźnik do ciągu docelowego. Żadna wartość zwracana nie jest zarezerwowana, aby wskazać błąd.

Uwagi

Funkcja strncat dołącza najwyżej pierwsze count znaki strSource do strDest. Początkowy znak strSource zastępowania kończącego znak null .strDest Jeśli znak null pojawi się przed strSourcecount dołączeniem znaków, strncat dołącza wszystkie znaki z strSource, aż do znaku null. Jeśli count jest większa niż długość strSource, długość strSource elementu jest używana zamiast count. We wszystkich przypadkach wynikowy ciąg jest zakończony znakiem null. Jeśli kopiowanie odbywa się między ciągami nakładającymi się, zachowanie jest niezdefiniowane.

Ważne

strncat nie sprawdza wystarczającej ilości miejsca w obiekcie strDest; dlatego jest to potencjalna przyczyna przepełnień buforu. Należy pamiętać, że count ogranicza liczbę dołączanych znaków; nie jest to limit rozmiaru strDestelementu . Zobacz poniższy przykład. Aby uzyskać więcej informacji, zobacz Unikanie przekroków buforu.

wcsncati _mbsncat są wersjami znaków wielobajtowych i wielobajtowych .strncat Argumenty ciągu i wartość zwracana wartości wcsncat to ciągi wieloznakowe. Argumenty ciągu i wartość zwracana wartości to ciągi wielobajtowe _mbsncat znaków. Te trzy funkcje zachowują się identycznie inaczej.

Na wartość wyjściową ma wpływ ustawienie LC_CTYPE ustawienia kategorii ustawień regionalnych. Aby uzyskać więcej informacji, zobacz setlocale. Wersje tych funkcji bez sufiksu _l używają bieżących ustawień regionalnych dla tego zachowania zależnego od ustawień regionalnych. Wersje z sufiksem _l są identyczne, z wyjątkiem używania parametru ustawień regionalnych przekazanych w zamian. Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.

W języku C++te funkcje mają przeciążenia szablonu. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Mapowania procedur tekstu ogólnego

TCHAR.H Rutynowych _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tcsncat strncat _mbsnbcat wcsncat
_tcsncat_l _strncat_l _mbsnbcat_l _wcsncat_l

Uwaga

_strncat_l i _wcsncat_l nie mają zależności od ustawień regionalnych i nie mają być wywoływane bezpośrednio. Są one udostępniane do użytku wewnętrznego przez _tcsncat_lprogram .

Wymagania

Procedura Wymagany nagłówek
strncat <string.h>
wcsncat <string.h> lub <wchar.h>
_mbsncat <mbstring.h>
_mbsncat_l <mbstring.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

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

Wyjście

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)

Widać, że BadAppend spowodowało przekroczenie buforu.

Zobacz też

Manipulowanie ciągami
_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
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych