Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Acrescenta caracteres de uma cadeia de caracteres. Estão disponíveis versões mais seguras destas funções; ver strncat_s, _strncat_s_l, wcsncat_s, , _wcsncat_s_l, _mbsncat_s. _mbsncat_s_l
Importante
_mbsncat e _mbsncat_l não pode ser usado em aplicativos executados no Tempo de Execução do Windows. Para obter mais informações, consulte Funções CRT não suportadas em aplicativos da Plataforma Universal do Windows.
Sintaxe
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
Parâmetros
strDest
Cadeia de caracteres de destino terminada em nulo.
strSource
Cadeia de caracteres de origem terminada em nulo.
count
Número de caracteres a acrescentar.
locale
Localidade a ser usada.
Valor de retorno
Retorna um ponteiro para a cadeia de caracteres de destino. Nenhum valor de retorno é reservado para indicar um erro.
Observações
A strncat função acrescenta, no máximo, os primeiros count caracteres de strSource a strDest. O caractere inicial de strSource substitui o caractere nulo de terminação de strDest. Se um caractere nulo aparecer antes countstrSource de os caracteres serem acrescentados, strncat acrescentará todos os caracteres de strSource, até o caractere nulo. Se count for maior que o comprimento de strSource, o comprimento de strSource é usado no lugar de count. Em todos os casos, a cadeia de caracteres resultante é encerrada com um caractere nulo. Se a cópia ocorrer entre cadeias de caracteres que se sobrepõem, o comportamento será indefinido.
Importante
strncat não verifica se há espaço suficiente, strDestsendo, portanto, uma causa potencial de estouros de buffer. Tenha em mente que count limita o número de caracteres anexados, não é um limite no tamanho do strDest. Veja o exemplo abaixo. Para obter mais informações, consulte Evitando saturações de buffer.
wcsncat e _mbsncat são versões de caracteres largos e multibytes do strncat. Os argumentos de cadeia de caracteres e o valor de retorno de são cadeias de wcsncat caracteres largos. Os argumentos de cadeia de caracteres e o valor de retorno de são cadeias de caracteres de _mbsncat multibyte. Estas três funções comportam-se de forma idêntica.
O valor de saída é afetado pela configuração da LC_CTYPE categoria da localidade. Para obter mais informações, consulte setlocale. As versões dessas funções sem o sufixo _l usam a localidade atual para esse comportamento dependente da localidade. As versões com o sufixo _l são idênticas, exceto que usam o parâmetro locale passado em vez disso. Para obter mais informações, consulte Localidade.
Em C++, essas funções têm sobrecargas de modelo. Para obter mais informações, consulte Sobrecargas de modelo seguro.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, consulte Estado global na CRT.
Mapeamentos de rotina de texto genérico
TCHAR.H rotina |
_UNICODE e _MBCS não definido |
_MBCS definido |
_UNICODE definido |
|---|---|---|---|
_tcsncat |
strncat |
_mbsnbcat |
wcsncat |
_tcsncat_l |
_strncat_l |
_mbsnbcat_l |
_wcsncat_l |
Observação
_strncat_l e _wcsncat_l não têm dependência de localidade e não devem ser chamados diretamente. Eles são fornecidos para uso interno pela _tcsncat_l.
Requerimentos
| Rotina | Cabeçalho obrigatório |
|---|---|
strncat |
<string.h> |
wcsncat |
<string.h> ou <wchar.h> |
_mbsncat |
<mbstring.h> |
_mbsncat_l |
<mbstring.h> |
Para obter mais informações sobre compatibilidade, consulte Compatibilidade.
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) );
}
Resultado
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)
Você pode ver que BadAppend causou uma saturação de buffer.
Consulte também
Manipulação de cadeias de caracteres
_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
Locale
Interpretação de sequências de caracteres multibyte