Chuỗi trong C là gì?
Chuỗi = Mảng ký tự (char[]) kết thúc bằng ký tự null '\0' (giá trị 0).
Khai báo
char ten[50]; // Mảng 50 ký tự (tối đa 49 ký tự + '\0')
char ten[100] = {0}; // Khởi tạo toàn bộ = 0 (rỗng)
Khởi tạo
Cách 1: Danh sách ký tự (có '\0' thủ công)
char s[20] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Hoặc
char s[20] = {'H', 'e', 'l', 'l', 'o'}; // Phần còn lại tự động = 0
Cách 2: Hằng chuỗi (String literal) - Tự động thêm '\0'
char s[20] = "Hello"; // Tương đương {'H','e','l','l','o','\0',0,0...}
char *s = "Hello"; // Con trỏ đến hằng chuỗi (read-only!)
Truy cập chuỗi
%strong printf/scanf: in/đọc đến khi gặp'\0'- Duyệt bằng chỉ số:
s[i] - Duyệt bằng con trỏ:
*(s+i)hoặcp++
Chương trình ví dụ
#include <stdio.h>
int main() {
char s[20] = "Hello";
printf("Chuoi: %s\n", s);
printf("Do dai: %lu\n", strlen(s));
printf("Ky tu dau: %c\n", s[0]);
printf("Ky tu cuoi: %c\n", s[strlen(s)-1]);
// Duyệt từng ký tự
printf("Cac ky tu: ");
for (int i = 0; s[i] != '\0'; i++) {
printf("'%c' ", s[i]);
}
printf("\n");
return 0;
}
Kết quả
Chuoi: Hello
Do dai: 5
Ky tu dau: H
Ky tu cuoi: o
Cac ky tu: 'H' 'e' 'l' 'l' 'o'
Lưu ý quan trọng
| Vấn đề | Sai | Đúng |
|---|---|---|
| Gán chuỗi sau khai báo | s = "Hi"; | strcpy(s, "Hi"); |
| So sánh chuỗi | if (s1 == s2) | if (strcmp(s1,s2)==0) |
| Độ dài | sizeof(s) | strlen(s) |
| Nhập có khoảng trắng | scanf("%s", s) | fgets(s, size, stdin) |
Các hàm thư viện quan trọng
| Hàm | Chức năng |
|---|---|
strlen(s) | Độ dài (không tính '\0') |
strcpy(dest, src) | Copy chuỗi |
strncpy(dest, src, n) | Copy n ký tự |
strcat(dest, src) | Nối chuỗi |
strcmp(s1, s2) | So sánh (0=bằng, <0 nhỏ hơn, >0 lớn hơn) |
strchr(s, c) | Tìm ký tự c đầu tiên |
strstr(s1, s2) | Tìm chuỗi con |
Chương trình demo các hàm
#include <stdio.h>
#include <string.h>
int main() {
char s1[50] = "Hello";
char s2[50] = "World";
char s3[100];
printf("strlen(s1): %lu\n", strlen(s1));
strcpy(s3, s1);
printf("strcpy: %s\n", s3);
strcat(s3, " ");
strcat(s3, s2);
printf("strcat: %s\n", s3);
printf("strcmp(s1,s2): %d\n", strcmp(s1, s2));
printf("strchr(s3, 'W'): %s\n", strchr(s3, 'W'));
printf("strstr(s3, "World"): %s\n", strstr(s3, "World"));
return 0;
}
Kết quả
strlen(s1): 5
strcpy: Hello
strcat: Hello World
strcmp(s1,s2): -15
strchr(s3, 'W'): World
strstr(s3, "World"): World
Nắm vững chuỗi là nền tảng để xử lý văn bản, parsing, network protocol, file I/O trong C.