strxfrm - cppreference.com

##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# strxfrm

From cppreference.com
< c‎ | string‎ | byte

Defined in header `<string.h>` |  |
size_t strxfrm( const char *dest, const char *src, size_t count ); |  | (until C99)
size_t strxfrm( const char *restrict dest, const char *restrict src, size_t count ); |  | (since C99)

Transforms the null-terminated byte string pointed to by `src` into the implementation-defined form such that comparing two transformed strings with strcmp gives the same result as comparing the original strings with strcoll, in the current C locale.

The first `count` characters of the transformed string are written to destination, including the terminating null character, and the length of the full transformed string is returned, excluding the terminating null character.

If `count` is ​0​, then `dest` is allowed to be a null pointer.

### [edit] Notes

The correct length of the buffer that can receive the entire transformed string is 1+strxfrm(NULL, src, 0)

### [edit] Parameters

dest | - | pointer to the first element of the array where the transformed string will be written
src | - | pointer to the first character of a null-terminated byte string to transform
count | - | maximum number of characters to be written

### [edit] Return value

The length of the transformed string, not including the terminating null-character.

### [edit] Example

Run this code

    #include <stdio.h>
    #include <string.h>
    #include <locale.h>

    int main(void)
    {
        setlocale(LC_COLLATE, "cs_CZ.iso88592");

        const char *in1 = "hrnec";
        char out1[1+strxfrm(NULL, in1, 0)];
        strxfrm(out1, in1, sizeof out1);

        const char *in2 = "chrt";
        char out2[1+strxfrm(NULL, in2, 0)];
        strxfrm(out2, in2, sizeof out2);

        printf("In the Czech locale: ");
        if(strcmp(out1, out2) < 0)
             printf("%s before %s\n",in1, in2);
        else
             printf("%s before %s\n",in2, in1);

        printf("In lexicographical comparison: ");
        if(strcmp(in1, in2)<0)
             printf("%s before %s\n",in1, in2);
        else
             printf("%s before %s\n",in2, in1);

    }

Output:

    In the Czech locale: hrnec before chrt
    In lexicographical comparison: chrt before hrnec

### [edit] References

- C11 standard (ISO/IEC 9899:2011):

  - 7.24.4.5 The strxfrm function (p: 366-367)

- C99 standard (ISO/IEC 9899:1999):

  - 7.21.4.5 The strxfrm function (p: 329-330)

- C89/C90 standard (ISO/IEC 9899:1990):

  - 4.11.4.5 The strxfrm function

### [edit] See also

strcoll | compares two strings in accordance to the current locale (function) [edit]
wcscoll (C95) | compares two wide strings in accordance to the current locale (function) [edit]
strcmp | compares two strings (function) [edit]
wcsxfrm (C95) | transform a wide string so that wcscmp would produce the same result as wcscoll (function) [edit]
C++ documentation for strxfrm

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/string/byte/strxfrm&oldid=78798"