strncat, _strncat_l, wcsncat, wcsncat_l, _mbsncat _mbsncat_l

Dołącza znaki ciągu.Bardziej bezpieczne wersje tych funkcji są dostępne w strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l.

Ważna uwagaWażne

_mbsncat i _mbsncat_l nie można używać w aplikacjach korzystających ze środowiska wykonawczego systemu Windows.Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane przez /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
    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 docelowego ciągu.Nie zwraca żadnej wartości zarezerwowanej, aby wskazać błąd.

Uwagi

strncat funkcja dołącza co najwyżej pierwsze count znaki z strSource do strDest.Początkowy charakter strSource zastępuje kończący znak null z strDest.Jeśli znak null znajduje się w strSource zanim znaki count są dołączane, strncat dołącza wszystkie znaki z strSource, do znaku null.Jeśli count jest większa niż długość strSource, długość strSource jest używana zamiast count.We wszystkich przypadkach wynikowy ciąg znaków jest zakończony znakiem null.Jeśli kopiowanie odbywa się między nakładającymi się ciągami, zachowanie jest niezdefiniowane.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

strncat nie sprawdza wystarczająco dużo miejsca w strDest; dlatego jest potencjalną przyczyną przekroczenia buforu.Należy pamiętać, że count ogranicza liczbę znaków dołączanych; nie jest to limit rozmiaru strDest.Zobacz przykład poniżej.Aby uzyskać więcej informacji, zobacz unikanie przekroczenia buforu.

wcsncat i _mbsncat są wersjami znaków dwubajtowych i znaków wielobajtowych strncat.Argumenty ciągu i wartość zwracana przez wcsncat są ciągami znaków dwubajtowych; te z _mbsncat są ciągami znaków wielobajtowych.Te trzy funkcje w innych wypadkach zachowują się identycznie.

Wartość wyjściowa jest zależna od konfiguracji ustawień kategorii LC_CTYPE ustawień regionalnych; zobacz setlocale, aby uzyskać więcej informacji.Wersje tych funkcji, które nie mają przyrostka _l używają bieżących ustawień regionalnych dla wszelkich zachowań zależnych od ustawień lokalnych; wersje, które mają przyrostek _l są identyczne, z tą różnicą, że w zamian korzystają z przekazanego parametru ustawień regionalnych.Aby uzyskać więcej informacji, zobacz Regionalne.

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

Rutynowe mapowania zwykłego tekstu

Procedura Tchar.h

_UNICODE & _MBCS nie zdefiniowano

_MBCS zdefiniowano

_UNICODE zdefiniowany

_tcsncat

strncat

_mbsnbcat

wcsncat

_tcsncat_l

_strncat_l

_mbsnbcat_l

_wcsncat_l

[!UWAGA]

_strncat_l i _wcsncat_l nie posiadają zależności ustawień regionalnych i nie są przeznaczone do bezpośredniego wywoływania.Są one świadczone na użytek wewnętrzny _tcsncat_l.

Wymagania

Procedura

Wymagany nagłówek

strncat

<Ciąg>

wcsncat

<ciągo.h> lub <wchar.h>

_mbsncat

<mbCiąg.h>

_mbsncat_l

<mbCiąg.h>

Dodatkowe informacje 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) );
}

Dane wyjściowe

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)

Należy zauważyć, że BadAppend powoduje przepełnienie buforu.

Odpowiednik w programie .NET Framework

System::String::Concat

Zobacz też

Informacje

Manipulowanie ciągami (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

Regionalne

Interpretacja wielobajtowych sekwencji znaków