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

Hàm strdup() và strndup() trong C/C++

strdup() – Nhân bản chuỗi

Cấp phát bộ nhớ mới (malloc), copy chuỗi kèm null terminator. Trả về con trỏ chuỗi mới, hoặc NULL nếu hết bộ nhớ. Cần free() sau dùng. Khai báo trong <string.h> (POSIX, không chuẩn C).

char *strdup(const char *s);

Ví dụ

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

int main() {
    char *s = "Helloworld";
    char *dup = strdup(s);
    if (dup) {
        printf("Copy: %s\n", dup);
        free(dup);
    }
    return 0;
}

Kết quả

Copy: Helloworld

strndup() – Nhân bản n ký tự đầu

Tương tự strdup nhưng chỉ copy tối đa n byte. Luôn null-terminated. Cũng POSIX.

char *strndup(const char *s, size_t n);

Ví dụ

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

int main() {
    char *s = "Helloworld";
    char *dup = strndup(s, 3);
    if (dup) {
        printf("Copy 3 ky tu: %s\n", dup);
        free(dup);
    }
    return 0;
}

Kết quả

Copy 3 ky tu: Hel
Lưu ý:
  • Cả hai là POSIX extension, không chuẩn ISO C/C++. Windows (MSVC) dùng _strdup, _strndup.
  • C++: Dùng std::string hoặc std::string_view (C++17) – tự quản lý bộ nhớ, an toàn hơn.
  • Luôn kiểm tra NULL và free() sau khi dùng.