In the C standard library, the strxfrm() function is used to transform a string into a form suitable for comparison based on specific locale settings (according to the current locale rules), allowing subsequent comparisons using strcmp().

strxfrm Function Header File

The header file for the strxfrm function is <string.h>. Before using the strxfrm function, ensure that this header file is included in your C code:

#include <string.h>

strxfrm Function Prototype

size_t strxfrm(char * restrict s1,
    const char * restrict s2,
    size_t n);

The strxfrm function transforms the string pointed to by s2 and places the resulting string into the array pointed to by s1. The result array pointed to by s1 can hold at most n characters, including the terminating '\0'. If n is 0, s1 can be a null pointer. Behavior is undefined if copying occurs between overlapping objects.

Parameter Description

  • s1: Pointer to the destination string, used to store the transformed string.

  • s2: Pointer to the source string, which needs to be transformed.

  • n: Size of the destination buffer, indicating the maximum number of characters s1 can store.

Return Value

The strxfrm function returns the length of the transformed string (excluding the terminating '\0'). If the returned value is n or greater than n, the content pointed to by s1 is undefined.

strxfrm Example Code

Due to the lack of sufficient locale types in the system, the transformation effects of this function cannot be demonstrated directly. This example only illustrates the usage of strxfrm;

Typically, appropriate memory can be allocated by calling strxfrm() twice. The first call uses n=0 to determine the required buffer size.

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

int main() {

    const char *src = "perfcode.com";

    // Use n = 0, +1 to account for '\0'
    size_t size = strxfrm(NULL, src, 0) + 1;
    
    char* buffer;
    
    buffer = (char*)malloc(size);
    if(buffer == NULL){
        // Memory allocation failed
        return -1;
    }

    strxfrm(buffer, src, size);

    printf("%s\n",buffer);
    
    free(buffer);

    return 0;
}