Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Hàm strxfrm() trong C/C++

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 dest phả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::collate facet.