Hàm strxfrm() biến đổi chuỗi nguồn theo locale hiện tại và copy tối đa n ký tự vào đích. Dùng cho so sánh chuỗi theo locale (collation). Khai báo trong <string.h> (C) / <cstring> (C++).
Cú pháp
size_t strxfrm(char *dest, const char *src, size_t n);
Tham số: dest – buffer đích; src – chuỗi nguồn; n – tối đa ký tự copy. Trả về độ dài chuỗi biến đổi (không kể null).
Ví dụ
#include <stdio.h>
#include <string.h>
int main() {
char src[10] = "HelloWorld";
char dest[10];
size_t n = strxfrm(dest, src, 5);
printf("Do dai chuoi bien doi: %zu\n", n);
printf("Dest (5 ky tu): %.5s\n", dest);
return 0;
}
Kết quả
Do dai chuoi bien doi: 10
Dest (5 ky tu): Hello
Giải thích: strxfrm biến đổi "HelloWorld" theo locale (thường không đổi với C locale). Trả về độ dài đầy đủ 10. Copy 5 ký tự đầu vào dest -> "Hello".
Ứng dụng chính
Chuẩn bị chuỗi cho strcmp theo locale:
char buf1[100], buf2[100];
strxfrm(buf1, s1, sizeof(buf1));
strxfrm(buf2, s2, sizeof(buf2));
if (strcmp(buf1, buf2) < 0) ...
Lưu ý:
- Buffer
destphải đủ lớn (tối thiểu trả về + 1 cho null). - Hành vi phụ thuộc
setlocale(LC_COLLATE, ...). - C++: ưu tiên
std::locale+std::collatefacet.