1. Giới thiệu
Trong ngôn ngữ C, chuỗi được xử lý như một mảng các ký tự. Đặc điểm này yêu cầu cách xử lý khác so với các ngôn ngữ lập trình khác. Đặc biệt, khi gán hoặc khởi tạo chuỗi, việc kết thúc bằng ký tự null (
) là không thể thiếu. Bài viết này sẽ tập trung vào chủ đề “c gán chuỗi”, giải thích chi tiết từ khai báo cơ bản đến cách gán và thao tác chuỗi. Ngoài ra, chúng tôi cũng đề cập đến những lưu ý quan trọng để đảm bảo sự ổn định của chương trình.
2. Khai báo và khởi tạo chuỗi
Trong C, chuỗi được khai báo thông qua mảng ký tự. Dưới đây là các cách khai báo và khởi tạo tiêu biểu.
Khai báo và khởi tạo bằng mảng
Chuỗi có thể được khai báo và khởi tạo thông qua mảng như sau:
char greeting[] = "Hello";
Trong ví dụ trên, chuỗi greeting
được khởi tạo với “Hello” và tự động thêm ký tự null (
) ở cuối. Trong C, có thể dùng toán tử =
để khởi tạo ngay khi khai báo mảng. Cách này thường bỏ qua việc chỉ định kích thước.
Thêm ký tự null
Nếu khởi tạo chuỗi bằng từng ký tự riêng lẻ, bạn cần thêm ký tự null thủ công như sau:
char greeting[6] = {'H', 'e', 'l', 'l', 'o', ' '};
Trong C, nếu thiếu ký tự null, các hàm xử lý chuỗi sẽ không hoạt động đúng, có thể đọc vượt quá giới hạn bộ nhớ và gây ra hành vi không mong muốn.

3. Cách gán chuỗi
Trong C, không thể gán trực tiếp một chuỗi cho biến chuỗi. Để sao chép nội dung chuỗi từ biến này sang biến khác, cần sử dụng hàm strcpy
.
Cách sử dụng cơ bản của hàm strcpy
strcpy
là một hàm trong thư viện chuẩn <string.h>
và được sử dụng như sau:
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello";
char destination[10];
strcpy(destination, source);
printf("Chuỗi đã được sao chép: %s\n", destination);
return 0;
}
Đoạn code trên sao chép nội dung chuỗi source
sang destination
, kết quả là destination
chứa “Hello”. Lưu ý, strcpy
không kiểm tra kích thước mảng, nên cần tránh vượt quá dung lượng bộ nhớ.
4. Thao tác với chuỗi
Ngôn ngữ C có nhiều hàm tiện ích để thao tác với chuỗi. Dưới đây là các hàm thường dùng như strlen
, strcat
và strcmp
.
Lấy độ dài chuỗi: strlen
Để lấy độ dài chuỗi (không tính ký tự null), dùng hàm strlen
:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello";
printf("Độ dài chuỗi: %zu\n", strlen(str));
return 0;
}
Nối chuỗi: strcat
Hàm strcat
nối một chuỗi vào cuối chuỗi khác:
#include <stdio.h>
#include <string.h>
int main() {
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name);
printf("Chuỗi sau khi nối: %s\n", greeting);
return 0;
}
So sánh chuỗi: strcmp
Hàm strcmp
so sánh hai chuỗi theo thứ tự từ điển. Nếu bằng nhau trả về 0, khác nhau trả về giá trị dương hoặc âm:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0) {
printf("Hai chuỗi giống nhau.\n");
} else {
printf("Hai chuỗi khác nhau.\n");
}
return 0;
}
Cách này giúp kiểm tra xem hai chuỗi có giống nhau hay xác định thứ tự từ điển.
5. Xử lý chuỗi bằng con trỏ
Có thể sử dụng con trỏ để xử lý chuỗi, giúp quản lý bộ nhớ linh hoạt hơn. Tuy nhiên, thao tác sai dễ dẫn đến lỗi hoặc crash.
Gán chuỗi bằng con trỏ
Khi dùng con trỏ, có thể khai báo và gán như sau:
#include <stdio.h>
int main() {
char *greeting = "Hello";
printf("%s\n", greeting);
return 0;
}
Với cách này, con trỏ trỏ trực tiếp đến chuỗi hằng. Tuy nhiên, không thể thay đổi nội dung của chuỗi hằng này.
6. Tổng kết và lưu ý
Khi gán hoặc thao tác với chuỗi, dễ xảy ra lỗi như tràn bộ nhớ hoặc truy cập con trỏ không hợp lệ. Đặc biệt, khi dùng strcpy
hoặc strcat
, cần tính toán kích thước mảng và cấp phát bộ nhớ phù hợp. Khi dùng con trỏ, cũng cần chú ý đến ký tự null và quản lý bộ nhớ cẩn thận. Nếu thực hiện đúng, thao tác chuỗi trong C sẽ mang lại hiệu quả xử lý dữ liệu cao.