Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lägger till tecken i en sträng. Säkrare versioner av dessa funktioner är tillgängliga. se strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l.
Viktigt!
_mbsncat och _mbsncat_l kan inte användas i program som körs i Windows Runtime. Mer information finns i CRT-funktioner som inte stöds i universella Windows Platform-appar.
Syntax
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
Parameterar
strDest
Null-avslutad målsträng.
strSource
Null-avslutad källsträng.
count
Antal tecken som ska läggas till.
locale
Nationella inställningar som ska användas.
Returvärde
Returnerar en pekare till målsträngen. Inget returvärde är reserverat för att indikera ett fel.
Anmärkningar
Funktionen strncat lägger till högst de första count tecknen strSource i till strDest. Det inledande tecknet strSource i skriver över det avslutande null-tecknet för strDest. Om ett null-tecken visas innan strSourcecount tecken läggs till lägger strncat du till alla tecken från strSource, upp till null-tecknet. Om count är större än längden på strSourceanvänds längden strSource på i stället för count. I samtliga fall avslutas den resulterande strängen med ett null-tecken. Om kopiering sker mellan strängar som överlappar varandra är beteendet odefinierat.
Viktigt!
strncat söker inte efter tillräckligt med utrymme i strDest. Det är därför en potentiell orsak till buffertöverskridningar. Tänk på att count begränsar antalet tecken som läggs till. Det är inte en gräns för storleken strDestpå . Se exemplet nedan. Mer information finns i Undvika buffertöverskridningar.
wcsncat och _mbsncat är wide-character och multibyte-tecken versioner av strncat. Strängargumenten och returvärdet wcsncat för är breda teckensträngar. Strängargumenten och returvärdet för är strängar med _mbsncat flerabytestecken. Dessa tre funktioner fungerar identiskt annars.
Utdatavärdet påverkas av inställningen för kategoriinställningen LC_CTYPE för nationella inställningar. Mer information finns i setlocale. Versionerna av dessa funktioner utan _l suffixet använder det aktuella nationella språket för det här språkberoende beteendet. Versionerna med suffixet _l är identiska förutom att de använder språkparametern som skickades in i stället. Mer information finns i Nationella inställningar.
I C++har dessa funktioner överbelastning av mallar. För mer information, se Secure template overloads.
Som standard är den här funktionens globala tillstånd begränsat till programmet. Information om hur du ändrar det här beteendet finns i Globalt tillstånd i CRT.
Allmän textrutinmappning
TCHAR.H rutin |
_UNICODE och _MBCS inte definierad |
_MBCS definierad |
_UNICODE definierad |
|---|---|---|---|
_tcsncat |
strncat |
_mbsnbcat |
wcsncat |
_tcsncat_l |
_strncat_l |
_mbsnbcat_l |
_wcsncat_l |
Anmärkning
_strncat_l och _wcsncat_l har inget nationella beroende och är inte avsedda att anropas direkt. De tillhandahålls för intern användning av _tcsncat_l.
Kravspecifikation
| Rutin | Obligatoriskt huvud |
|---|---|
strncat |
<string.h> |
wcsncat |
<string.h> eller <wchar.h> |
_mbsncat |
<mbstring.h> |
_mbsncat_l |
<mbstring.h> |
Mer kompatibilitetsinformation finns i Kompatibilitet.
Example
// 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) );
}
Utgång
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)
Du kan se att det BadAppend orsakade en buffertöverskridning.
Se även
Strängmanipulering
_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
regionala inställningar
Tolkning av sekvenser med flerabytestecken