Menu
CoddyTech

Dùng strcpy()

Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 16 trên 63.

Bạn đã học cách tìm độ dài của chuỗi bằng strlen(), nhưng nếu bạn cần sao chép nội dung của chuỗi này sang chuỗi khác thì sao? Trong C, bạn không thể dùng toán tử gán (=) để sao chép chuỗi như cách bạn làm với các biến thông thường.

Lý do là chuỗi là mảng ký tự, và khi bạn dùng = với mảng, bạn chỉ sao chép địa chỉ bộ nhớ chứ không sao chép nội dung thực tế. Đây là lúc hàm strcpy() trong thư viện <string.h> trở nên cần thiết.

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

char source[] = "Hello";
char destination[20];
strcpy(destination, source);  // Sao chép "Hello" vào destination

Hàm (function) strcpy() nhận hai đối số: mảng đích (nơi bạn muốn sao chép đến) và chuỗi nguồn (nội dung bạn muốn sao chép). Hàm sao chép từng ký tự từ nguồn sang đích, bao gồm cả ký tự kết thúc null.

Điều quan trọng là mảng đích phải đủ lớn để chứa toàn bộ chuỗi nguồn cùng ký tự kết thúc null. Nếu mảng đích quá nhỏ, strcpy() sẽ ghi vượt quá giới hạn của mảng, gây ra hành vi không xác định.

Hàm này rất quan trọng khi thao tác với chuỗi trong C, giúp bạn sao chép chuỗi, khởi tạo biến chuỗi bằng nội dung có sẵn và chuẩn bị chuỗi cho các bước xử lý tiếp theo.

challenge icon

Thử thách

Dễ

Viết một chương trình C minh họa cách sao chép chuỗi (string) bằng hàm strcpy(). Chương trình cần:

  1. Đọc một số nguyên n biểu thị số thao tác với chuỗi cần thực hiện
  2. Với mỗi thao tác:
    • Đọc một chuỗi nguồn từ đầu vào
    • Khai báo một mảng ký tự có tên destination gồm 100 phần tử
    • Dùng strcpy() để sao chép chuỗi nguồn vào mảng đích
    • In cả chuỗi nguồn ban đầu và chuỗi đích đã sao chép
  3. Sau khi thực hiện tất cả thao tác, minh họa rằng các chuỗi đã sao chép độc lập với nhau bằng cách:
    • Sửa ký tự đầu tiên của mảng đích cuối cùng thành 'X'
    • In chuỗi đích đã sửa để cho thấy chuỗi đã thay đổi

Nhớ thêm tiêu đề <string.h> để sử dụng hàm strcpy().

Đầu ra của bạn cần hiển thị kết quả theo định dạng sau:

Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]

Ví dụ, nếu đầu vào là:

3
hello
world
programming

Đầu ra của bạn sẽ là:

Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: Xrogramming

Thử thách này kiểm tra mức độ hiểu biết của bạn về cách dùng strcpy() để sao chép nội dung chuỗi từ mảng ký tự này sang mảng ký tự khác, cách cấp phát bộ nhớ phù hợp cho các mảng đích, đồng thời minh họa rằng các chuỗi đã sao chép độc lập với chuỗi nguồn.

Tự làm thử

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

int main() {
    int n;
    scanf("%d", &n);
    
    char source[100];
    char destination[100];
    
    // TODO: Viết code của bạn ở đây
    // Dùng vòng lặp (loop) để xử lý n thao tác với chuỗi (string)
    // Với mỗi thao tác:
    // - Đọc chuỗi source
    // - Dùng strcpy() để sao chép source sang destination
    // - In cả hai chuỗi theo định dạng yêu cầu
    
    // TODO: Sau vòng lặp, sửa ký tự (character) đầu tiên của destination cuối cùng
    // và in chuỗi đã sửa
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch C online