Partilhar via


_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 setlocalee _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