Sự khác nhau giữa hàm strcpy() và strdup()?

  • Hàm strcpy(char* s1, char* s2) copy nội dung vùng nhớ s2 và vùng nhớ s1. Vùng nhớ s1 phải được cấp phát tĩnh hoặc cấp phát động trước đó (malloc( ), new( )). Kích thước vùng nhớ s1 phải đủ để chứa chuỗi s2. Nếu không đủ vùng nhớ, gây ra buffer overrun.

Ví dụ:

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

void main( void )
{
    char s[20];
    char p[] = "vncoding.net";
    strcpy(s, p);
    printf("\ns = %s", s);
    getch();
}

Kết quả:

Hàm strcpy( )
Hàm strcpy( )

 

  • Hàm strdup(const char* s) tạo ra vùng nhớ mới (gọi hàm malloc( ) để cấp phát vùng nhớ) để lưu chuỗi s. Sau đó, trả về con trỏ trỏ tới vùng nhớ được cấp phát. Nếu cấp phát fail, hàm trả về NULL. Chú ý: phải free vùng nhớ trả về bởi hàm strdup.
#include <stdio.h>
#include <conio.h>
#include <string.h>

void main( void )
{
    char *s = strdup("vncoding.net");
    if(s)
    {
        printf("\ns = %s", s);
        free(s);
    }
    getch();
}

Kết quả:

Hàm strdup( )
Hàm strdup( )

Be the first to comment

Leave a Reply