![]() Chapter Contents |
![]() Previous |
![]() Next |
| strxfrm |
| Portability: | ISO/ANSI C conforming |
| SYNOPSIS | |
| DESCRIPTION | |
| RETURN VALUE | |
| CAUTION | |
| IMPLEMENTATION | |
| EXAMPLE |
| SYNOPSIS |
#include <string.h> size_t strxfrm(char *str1, const char *str2, size_t n);
| DESCRIPTION |
strxfrm
transforms the string pointed to by
str2
using the collating sequence or routines (or both) defined by
the
LC_COLLATE
category
of the current locale. The resulting string is placed into the array pointed
to by
str1
.
The transformation is such that if the
strcmp
function is applied to two transformed
strings, it returns greater than, equal to, or less than
0
, corresponding to the result of the
strcoll
function applied directly to the two
original strings.
No more than
n
characters are placed into the resulting array pointed to by
str1
, including the terminating
null character. If
n
is
0
,
str1
is permitted to be
NULL
. The results are unpredictable if the strings pointed to by
str1
and
str2
overlap.
| RETURN VALUE |
strxfrm
returns the length of the transformed string (not including
the terminating null character). If the value returned is
n
or more, the first
n
characters are written to the array without null termination. In
the "
S370
" locale, the
behavior of
strxfrm
is
like that of
strncpy
except
that the number of characters copied to the output array is returned instead
of a pointer to the copied string.
| CAUTION |
If the
str2
argument is not properly terminated or
n
is bigger than the output array pointed to by
str1
, then a protection or addressing
exception
may occur. The size of the output array needed to hold the transformed string
pointed to by
str2
can
be determined by the following statement:
size_needed = 1 + strxfrm(NULL, str1, 0);
| IMPLEMENTATION |
strxfrm
uses the following logic when transforming a string:
strxfrm
calls the locale's
strxfrm
function
equivalent, if available, to transform
str2
and place the result in the
str1
array. See LOCALE strxfrm EQUIVALENT.
strxfrm
calls the
library's double-byte
strxfrm
collation routine with a standard double-byte collating sequence
if the locale is a double-byte locale as determined from the
LC_COLLATE
category, no locale
strxfrm
function is available, and no collation
table is supplied.
strxfrm
uses a collation table to transform the string if the locale is a
single-byte locale and has a collation table available.
strxfrm
invokes the equivalent of
strncpy
to copy
str2
to
str1
if none of the
above are true.
| EXAMPLE |
This example verifies that
strcmp
yields the same result as
strcoll
when it is used to compare two strings
transformed by
strxfrm
.
#include <locale.h>
#include <string.h>
main()
{
char *str1, *str2, /* input strings pointers */
txf1[80], txf2[80]; /* transform arrays */
int result_strcoll, result_strcmp; /* compare results */
str1 = " A B C D";
str2 = " A C B";
if ((strxfrm(txf1, str1, sizeof(txf1)) < sizeof(txf1)) &&
(strxfrm(txf2, str2, sizeof(txf2)) < sizeof(txf2)))
result_strcmp = strcmp(txf1, txf2);
else exit(4); /* error exit if length is too big */
result_strcoll = strcoll(str1, str2); /* Get strcoll result. */
/* Result must be 0 or result signs must be the same. */
if ((result_strcmp == result_strcoll) ||
(result_strcmp*result_strcoll > 0))
exit(0);
else exit(8); /* Else this is an error. */
}
![]() Chapter Contents |
![]() Previous |
![]() Next |
![]() Top of Page |
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.