Поделиться через


_strdec, _wcsdec, _mbsdec, _mbsdec_l

Перемещают указатель строки на один символ назад.

Важно!

Функции _mbsdec и _mbsdec_l не могут использоваться в приложениях, запускаемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.

Синтаксис

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
);

Параметры

start
Указатель на любой символ (или для _mbsdec и _mbsdec_l, первый байт любого многобайтового символа) в исходной строке; start должен предшествовать current исходной строке.

current
Указатель на любой символ (или для _mbsdec и _mbsdec_l, первый байт любого многобайтового символа) в исходной строке; current должен соответствовать start исходной строке.

locale
Используемый языковой стандарт.

Возвращаемое значение

_mbsdec, _mbsdec_l, _strdecи _wcsdec каждый возвращает указатель на символ, который немедленно предшествует current; _mbsdec возвращает NULL , если значение start больше или равно значению current. _tcsdec сопоставляется с одной из этих функций, и ее возвращаемое значение зависит от сопоставления.

Замечания

Функции _mbsdec и _mbsdec_l возвращают указатель на первый байт многобайтового символа, который непосредственно предшествует current в строке, содержащей start.

Выходное значение зависит от параметра LC_CTYPE категории языкового стандарта. Дополнительные сведения см. в разделе setlocale, _wsetlocale. _mbsdec распознает последовательности многобайтовых символов в соответствии с используемым в данный момент языковым стандартом; функция _mbsdec_l идентична, за исключением того, что она использует переданный параметр языкового стандарта. Дополнительные сведения см. в разделе Locale.

Если start или current есть NULL, вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если продолжение выполнения разрешено, эта функция возвращает EINVAL и задает для errno значение EINVAL.

Важно!

Эти функции могут быть подвержены угрозам переполнения буфера. Переполнение буфера можно использовать для атак на систему, поскольку оно может привести к несанкционированному повышению уровня привилегий. Дополнительные сведения см. в разделе "Избегание переполнения буфера".

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Сопоставления подпрограмм универсального текста

Подпрограмма Tchar.h _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tcsdec _strdec _mbsdec _wcsdec

_strdec и _wcsdec — версии _mbsdec и _mbsdec_l с однобайтовыми или расширенными символами. _strdec и _wcsdec предоставляются только для этого сопоставления и не должны использоваться в противном случае.

Дополнительные сведения см. в разделе "Использование универсальных текстовых сопоставлений и универсальных текстовых сопоставлений".

Требования

Маршрут Обязательный заголовок Необязательный заголовок
_mbsdec <mbstring.h> <mbctype.h>
_mbsdec_l <mbstring.h> <mbctype.h>
_strdec <tchar.h>
_wcsdec <tchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

В следующем примере показано использование функции _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);
}

В следующем примере показано использование функции _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);
}

См. также

Обработка строк
_strinc, _wcsinc, _mbsinc, _mbsinc_l
_strnextc, _wcsnextc, _mbsnextc, _mbsnextc_l
_strninc, _wcsninc, _mbsninc, _mbsninc_l