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::stringhoặcstd::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.