strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l

Przekształć ciąg na podstawie informacji specyficznych dla ustawień regionalnych.

Składnia

size_t strxfrm(
   char *strDest,
   const char *strSource,
   size_t count
);
size_t wcsxfrm(
   wchar_t *strDest,
   const wchar_t *strSource,
   size_t count
);
size_t _strxfrm_l(
   char *strDest,
   const char *strSource,
   size_t count,
   _locale_t locale
);
size_t wcsxfrm_l(
   wchar_t *strDest,
   const wchar_t *strSource,
   size_t count,
   _locale_t locale
);

Parametry

strDest
Ciąg docelowy.

strSource
Ciąg źródłowy.

count
Maksymalna liczba znaków do umieszczenia w pliku strDest.

locale
Ustawienia regionalne do użycia.

Wartość zwracana

Zwraca długość przekształconego ciągu, nie licząc znaku o wartości null kończącej. Jeśli wartość zwracana jest większa lub równa countwartości , zawartość elementu strDest jest nieprzewidywalna. Po błędzie każda funkcja ustawia errno i zwraca wartość INT_MAX. Dla nieprawidłowego znaku errno jest ustawiona wartość EILSEQ.

Uwagi

Funkcja strxfrm przekształca ciąg wskazywany przez strSource element na nowy, posadzony formularz, który jest przechowywany w pliku strDest. Nie więcej niż count znaki, w tym znak null, są przekształcane i umieszczane w wynikowym ciągu. Przekształcenie jest wykonywane przy użyciu ustawienia kategorii ustawień regionalnych LC_COLLATE . Aby uzyskać więcej informacji na temat LC_COLLATEprogramu , zobacz setlocale. strxfrm używa bieżących ustawień regionalnych dla zachowania zależnego od ustawień regionalnych; _strxfrm_l jest taka sama, z tą różnicą, że używa ustawień regionalnych przekazanych zamiast bieżących ustawień regionalnych. Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.

Po przekształceniu wywołanie metody strcmp z dwoma przekształconymi ciągami daje wyniki identyczne z wynikami wywołania strcoll zastosowanego do dwóch oryginalnych ciągów. Podobnie jak w systemach i stricoll, strxfrm automatycznie obsługuje ciągi wielobajtowe znaków zgodnie z strcoll potrzebami.

wcsxfrm jest wersją znaków szerokoznakowych strxfrm; argumenty ciągu są wskaźnikami wcsxfrm o szerokim znaku. W przypadku wcsxfrmmetody po przekształceniu ciągu wywołanie metody wcscmp z dwoma przekształconymi ciągami daje wyniki identyczne z wynikami wywołania wcscoll zastosowanego do dwóch oryginalnych ciągów. wcsxfrm i strxfrm zachowywać się identycznie w przeciwnym razie. wcsxfrm używa bieżących ustawień regionalnych dla zachowania zależnego od ustawień regionalnych; _wcsxfrm_l używa ustawień regionalnych przekazanych zamiast bieżących ustawień regionalnych.

Te funkcje weryfikują ich parametry. Jeśli strSource jest wskaźnikiem o wartości null lub strDest jest wskaźnikiem NULL (chyba że liczba jest równa zero) lub jeśli count jest większa niż INT_MAX, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametru . Jeśli wykonanie może kontynuować, te funkcje są ustawione errno na EINVAL i zwracają wartość INT_MAX.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Mapowania rutynowych tekstu ogólnego tekstu

Procedura TCHAR.H _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tcsxfrm strxfrm strxfrm wcsxfrm
_tcsxfrm_l _strxfrm_l _strxfrm_l _wcsxfrm_l

W ustawieniach regionalnych "C" kolejność znaków w zestawie znaków (zestaw znaków ASCII) jest taka sama jak kolejność leksykograficzna znaków. Jednak w innych ustawieniach regionalnych kolejność znaków w zestawie znaków może różnić się od kolejności znaków leksykograficznych. Na przykład w niektórych europejskich ustawieniach regionalnych znak "a" (wartość 0x61) poprzedza znak "ä" (wartość 0xE4) w zestawie znaków, ale znak "ä" poprzedza znak "a" leksykograficznie.

W ustawieniach regionalnych, dla których zestaw znaków i kolejność znaków leksykograficznych różnią się, użyj strxfrm w oryginalnych ciągach, a następnie strcmp na ciągach wynikowych w celu utworzenia porównania ciągów leksykograficznych zgodnie z ustawieniem kategorii bieżącego ustawienia regionalnego LC_COLLATE . W związku z tym, aby porównać dwa ciągi leksykograficznie w powyższych ustawieniach regionalnych, użyj strxfrm w oryginalnych ciągach, a następnie strcmp na ciągach wynikowych. Alternatywnie można użyć strcoll zamiast strcmp oryginalnych ciągów.

strxfrm jest w zasadzie otoką z LCMapStringLCMAP_SORTKEY.

Wartość następującego wyrażenia to rozmiar tablicy potrzebnej do przechowywania strxfrm przekształcenia ciągu źródłowego:

1 + strxfrm( NULL, string, 0 )

Tylko ustawienia regionalne strxfrm "C" są równoważne następującym wywołaniom funkcji:

strncpy( _string1, _string2, _count );
return( strlen( _string1 ) );

Wymagania

Procedura Wymagany nagłówek
strxfrm <string.h>
wcsxfrm <string.h> lub <wchar.h>
_strxfrm_l <string.h>
_wcsxfrm_l <string.h> lub <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Zobacz też

Konwersja danych
localeconv
setlocale, _wsetlocale
Ustawień regionalnych
Manipulowanie ciągami
strcoll Funkcje
strcmp, wcscmp, _mbscmp
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l