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 null zakończenia. Jeśli wartość zwracana jest większa lub równa count, zawartość elementu strDest jest nieprzewidywalna. W przypadku błędu 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 strSource przez element na nowy formularz sortowania, 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 identyczna, 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 przypadku strcoll i stricoll, strxfrm automatycznie obsługuje ciągi wielobajtowe znaków odpowiednio.

wcsxfrm jest wersją wieloznakową ; strxfrmargumenty ciągów wcsxfrm to wskaźniki o szerokim znaku. W przypadku wcsxfrmmetody po przekształceniu ciągu wywołanie wcscmp metody 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 inaczej. 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ą swoje 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 wykonywanie jest dozwolone do kontynuowania, 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 procedur tekstu ogólnego

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 leksykograficznej. 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 leksykograficznej różnią się, użyj strxfrm w oryginalnych ciągach, a następnie strcmp na wynikowych ciągach w celu utworzenia porównania ciągów leksykograficznego 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 na oryginalnych ciągach.

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 w ustawieniach regionalnych strxfrm "C" jest odpowiednikiem następujących wywołań 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
ustawienia regionalne
Manipulowanie ciągami
strcoll, funkcje
strcmp, , wcscmp_mbscmp
strncmp, , wcsncmp, , _mbsncmp_mbsncmp_l