Chuỗi (string) thực ra là mảng một chiều các ký tự (character array) được kết thúc bằng ký tự rỗng (null) ‘\0’. Do đó, một chuỗi kết thúc bằng null (null-terminated string) gồm các ký tự bao gồm string theo sau là một null.
Cách khai báo và khởi tạo dưới đây tạo một chuỗi chứa từ “Hello”. Để giữ ký tự null ở cuối mảng, kích thước của mảng ký tự chứa chuỗi phải lớn hơn một ký tự so với “Hello”.
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
Nếu bạn làm theo cách khởi tạo mảng thì bạn có thể viết phát biểu như sau.
char greeting[] = "Hello";
Trong bộ nhớ thì chuỗi trên sẽ được lưu là.
Thật ra, bạn không bị bắt buộc đặt ký tự null ở cuối một chuỗi hằng (string constant). Bộ biên dịch C sẽ tự động đặt ‘\0’ tại cuối chuỗi khi nó khởi tạo mảng. Chúng ta hãy thử in chuỗi trên ra màn hình xem.
#include <stdio.h> int main () { char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; printf("Greeting message: %s\n", greeting ); return 0; }
Khi đoạn code trên được biên dịch và thực thi, ta được kết quả sau.
Greeting message: Hello
Hàm Xử Lý Chuỗi
Ngôn ngữ lập trình C hỗ trợ nhiều loại hàm điều khiển chuỗi kết thúc bằng null.
Sr.No. | Function & Purpose |
1 | strcpy(s1, s2); Copy chuỗi s2 vào chuỗi s1. |
2 | strcat(s1, s2); Nối chuỗi s2 vào chuỗi s1. |
3 | strlen(s1); Trả về độ dài chuỗi s1. |
4 | strcmp(s1, s2); Trả về 0 nếu s1 và s2 giống nhau; nhỏ hơn 0 nếu s1<s2; lớn hơn 0 nếu s1>s2. |
5 | strchr(s1, ch); Trả về một con trỏ tới chỗ xuất hiện đầu tiên của kí tự ch chuỗi s1. |
6 | strstr(s1, s2); Trả về một con trỏ tới chỗ xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1. |
Hãy xem xét ví dụ này để hiểu các hàm vừa đề cập ở trên.
#include <stdio.h> #include <string.h> int main () { char str1[12] = "Hello"; char str2[12] = "World"; char str3[12]; int len ; /* copy str1 into str3 */ strcpy(str3, str1); printf("strcpy( str3, str1) : %s\n", str3 ); /* concatenates str1 and str2 */ strcat( str1, str2); printf("strcat( str1, str2): %s\n", str1 ); /* total lenghth of str1 after concatenation */ len = strlen(str1); printf("strlen(str1) : %d\n", len ); return 0; }
Khi đoạn code được biên dịch và thực thi, kết quả nhận được là.
strcpy( str3, str1) : Hello strcat( str1, str2): HelloWorld strlen(str1) : 10