strxfrm
, wcsxfrm
, _strxfrm_l
, _wcsxfrm_l
Transforme uma cadeia de caracteres com base nas informações específicas à localidade.
Sintaxe
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
);
Parâmetros
strDest
Cadeia de caracteres de destino.
strSource
Cadeia de caracteres de origem.
count
Número máximo de caracteres a serem colocados em strDest
.
locale
A localidade a ser usada.
Valor retornado
Retorna o tamanho da cadeia de caracteres transformada, sem contar o caractere nulo de terminação. Se o valor retornado for maior ou igual a count
, o conteúdo de strDest
será imprevisível. Em um erro, cada função define errno
e retorna INT_MAX
. Para um caractere inválido, errno
é definido como EILSEQ
.
Comentários
A função strxfrm
transforma a cadeia de caracteres apontada por strSource
em um novo formato agrupado que é armazenado em strDest
. Um número que não excede count
caracteres, incluindo o caractere nulo, é transformado e colocado na cadeia de caracteres resultante. A transformação é feita usando a configuração de categoria LC_COLLATE
da localidade. Para obter mais informações sobre LC_COLLATE
o , consulte setlocale
. strxfrm
usa a localidade atual de seu comportamento dependente da localidade; _strxfrm_l
é idêntico, exceto pelo fato de que ele usa a localidade passada, em vez da localidade atual. Para obter mais informações, consulte Localidade.
Após a transformação, uma chamada para strcmp
com as duas cadeias de caracteres transformadas produz resultados idênticos aos resultados de uma chamada para strcoll
aplicada às duas cadeias de caracteres originais. Assim como ocorre com strcoll
e stricoll
, strxfrm
manipula automaticamente as cadeias de caracteres multibyte, conforme apropriado.
wcsxfrm
é uma versão de caractere largo de strxfrm
; os argumentos de cadeia de caracteres de wcsxfrm
são ponteiros de caracteres largos. Para wcsxfrm
, após a transformação da cadeia de caracteres, uma chamada para wcscmp
com as duas cadeias de caracteres transformadas produz resultados idênticos aos resultados de uma chamada para wcscoll
aplicada às duas cadeias de caracteres originais. Caso contrário, wcsxfrm
e strxfrm
se comportam de forma idêntica. wcsxfrm
usa a localidade atual de seu comportamento dependente da localidade; _wcsxfrm_l
usa a localidade passada, em vez da localidade atual.
Essas funções validam seus parâmetros. Se strSource
for um ponteiro nulo ou strDest
for um NULL
ponteiro (a menos que count seja zero) ou se count
for maior que INT_MAX
, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essas funções definirão errno
como EINVAL
e retornarão INT_MAX
.
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 |
---|---|---|---|
_tcsxfrm |
strxfrm |
strxfrm |
wcsxfrm |
_tcsxfrm_l |
_strxfrm_l |
_strxfrm_l |
_wcsxfrm_l |
Na localidade “C”, a ordem dos caracteres no conjunto de caracteres (conjunto de caracteres ASCII) é a mesma que a ordem lexicográfica dos caracteres. No entanto, em outras localidades, a ordem de caracteres no conjunto de caracteres pode ser diferente da ordem lexicográfica de caracteres. Por exemplo, em certas localidades europeias, o caractere 'a' (valor 0x61) precede o caractere 'ä' (valor 0xE4) no conjunto de caracteres, mas o caractere 'ä' precede o caractere 'a' lexicograficamente.
Em localidades nas quais o conjunto de caracteres e a ordem lexicográfica dos caracteres diferem, use strxfrm
nas cadeias de caracteres originais e, em seguida, strcmp
nas cadeias de caracteres resultantes para produzir uma comparação lexicográfica de cadeia de caracteres de acordo com a configuração de categoria LC_COLLATE
da localidade atual. Portanto, para comparar duas cadeias de caracteres lexicograficamente na localidade acima, use strxfrm
nas cadeias de caracteres originais e, em seguida, strcmp
nas cadeias de caracteres resultantes. Como alternativa, é possível usar strcoll
em vez de strcmp
nas cadeias de caracteres originais.
strxfrm
é basicamente um invólucro com LCMapString
LCMAP_SORTKEY
.
O valor da seguinte expressão é o tamanho da matriz necessário para conter a transformação strxfrm
da cadeia de caracteres de origem:
1 + strxfrm( NULL, string, 0 )
Somente na localidade "C", strxfrm
é equivalente às seguintes chamadas de função:
strncpy( _string1, _string2, _count );
return( strlen( _string1 ) );
Requisitos
Rotina | Cabeçalho necessário |
---|---|
strxfrm |
<string.h> |
wcsxfrm |
<string.h> ou <wchar.h> |
_strxfrm_l |
<string.h> |
_wcsxfrm_l |
<string.h> ou <wchar.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Confira também
Conversão de dados
localeconv
setlocale
, _wsetlocale
Localidade
Manipulação de cadeia de caracteres
Funções strcoll
strcmp
, wcscmp
, _mbscmp
strncmp
, wcsncmp
, _mbsncmp
, _mbsncmp_l