_strdec
, _wcsdec
, _mbsdec
, _mbsdec_l
Recua um ponteiro de cadeia de caracteres em um caractere.
Importante
_mbsdec
e _mbsdec_l
não podem ser usados em aplicativos executados no Windows Runtime. Para obter mais informações, confira Funções do CRT sem suporte em aplicativos da Plataforma Universal do Windows.
Sintaxe
unsigned char *_strdec(
const unsigned char *start,
const unsigned char *current
);
unsigned wchar_t *_wcsdec(
const unsigned wchar_t *start,
const unsigned wchar_t *current
);
unsigned char *_mbsdec(
const unsigned char *start,
const unsigned char *current
);
unsigned char *_mbsdec_l(
const unsigned char *start,
const unsigned char *current,
_locale_t locale
);
Parâmetros
start
Ponteiro para qualquer caractere (ou for _mbsdec
e _mbsdec_l
, o primeiro byte de qualquer caractere multibyte) na cadeia de caracteres de origem; start
deve preceder current
na cadeia de caracteres de origem.
current
Ponteiro para qualquer caractere (ou for _mbsdec
e _mbsdec_l
, o primeiro byte de qualquer caractere multibyte) na cadeia de caracteres de origem; current
deve seguir start
na cadeia de caracteres de origem.
locale
Localidade a usar.
Valor retornado
_mbsdec
, _mbsdec_l
, _strdec
, e _wcsdec
cada um retorna um ponteiro para o caractere que precede imediatamente current
; _mbsdec
retorna NULL
se o valor de start
for maior ou igual ao de current
. _tcsdec
mapeia para uma dessas funções e seu valor retornado depende do mapeamento.
Comentários
As funções _mbsdec
e _mbsdec_l
retornam um ponteiro para o primeiro byte do caractere multibyte imediatamente anterior a current
na cadeia de caracteres que contém start
.
O valor de saída é afetado pela configuração da categoria LC_CTYPE
da localidade. Para obter mais informações, consulte setlocale
e _wsetlocale
. _mbsdec
reconhece sequências de caractere multibyte de acordo com a localidade em uso atualmente, enquanto _mbsdec_l
é idêntico exceto pelo fato de usar o parâmetro de localidade passado. Para obter mais informações, consulte Localidade.
Se start
ou current
for NULL
, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essa função retornará EINVAL
e definirá errno
como EINVAL
.
Importante
Essas funções podem ser vulneráveis a ameaças de estouro de buffer. Os estouros de buffer podem ser usados em ataques de sistema porque podem causar uma elevação de privilégio não garantida. Para obter mais informações, confira Como evitar sobrecargas de buffer.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Mapeamentos de rotina de texto genérico
Rotina Tchar.h | _UNICODE e _MBCS não definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tcsdec |
_strdec |
_mbsdec |
_wcsdec |
_strdec
e _wcsdec
são versões de caractere de byte único e de caractere largo de _mbsdec
e _mbsdec_l
. _strdec
e _wcsdec
são fornecidos apenas para esse mapeamento e não devem ser usados de outra forma.
Para obter mais informações, consulte Usando mapeamentos de texto genérico e Mapeamentos de texto genérico.
Requisitos
Rotina | Cabeçalho necessário | Cabeçalho opcional |
---|---|---|
_mbsdec |
<mbstring.h> | <mbctype.h> |
_mbsdec_l |
<mbstring.h> | <mbctype.h> |
_strdec |
<tchar.h> | |
_wcsdec |
<tchar.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
O exemplo a seguir demonstra um uso de _tcsdec
.
// crt_tcsdec.cpp
// Compile by using: cl /EHsc crt_tcsdec.cpp
#include <iostream>
#include <tchar.h>
using namespace std;
int main()
{
const TCHAR *str = _T("12345");
cout << "str: " << str << endl;
const TCHAR *str2;
str2 = str + 2;
cout << "str2: " << str2 << endl;
TCHAR *answer;
answer = _tcsdec( str, str2 );
cout << "answer: " << answer << endl;
return (0);
}
O exemplo a seguir demonstra um uso de _mbsdec
.
// crt_mbsdec.cpp
// Compile by using: cl /EHsc crt_mbsdec.c
#include <iostream>
#include <mbstring.h>
using namespace std;
int main()
{
char *str = "12345";
cout << "str: " << str << endl;
char *str2;
str2 = str + 2;
cout << "str2: " << str2 << endl;
unsigned char *answer;
answer = _mbsdec( reinterpret_cast<unsigned char *>( str ), reinterpret_cast<unsigned char *>( str2 ));
cout << "answer: " << answer << endl;
return (0);
}
Confira também
Manipulação de cadeia de caracteres
_strinc
, _wcsinc
, _mbsinc
, _mbsinc_l
_strnextc
, _wcsnextc
, _mbsnextc
, _mbsnextc_l
_strninc
, _wcsninc
, _mbsninc
, _mbsninc_l