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_COLLATE
programu , 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ą ; strxfrm
argumenty ciągów wcsxfrm
to wskaźniki o szerokim znaku. W przypadku wcsxfrm
metody 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 zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_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 LCMapString
LCMAP_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