Strings: char arrays and the null terminator · Chuỗi ký tự: mảng char và ký tự kết thúc null
Text is an array of chars
- C has no separate string type. A string is just an array of
char. char word[] = "hi";actually stores'h','i', and a hidden'\0'at the end.- You can read one character at a time with an index, exactly like any array.
Text là mảng ký tự
- C không có kiểu chuỗi riêng biệt. Một chuỗi thực chất chỉ là một mảng các
char. char word[] = "hi";thực tế lưu trữ'h','i'và một'\0'ẩn ở cuối.- Bạn có thể đọc từng ký tự một bằng chỉ số, giống hệt như bất kỳ mảng nào khác.
The invisible terminator '\0'
- Every C string ends with a special null terminator, written
'\0'(a byte equal to0). - It marks where the text stops. The word
"hi"takes three bytes:'h','i','\0'. - Functions know a string has ended when they reach
'\0'— there is no stored length.
Ký tự kết thúc vô hình '\0'
- Mọi chuỗi C đều kết thúc bằng một ký tự kết thúc null đặc biệt, được viết là
'\0'(một byte có giá trị bằng0). - Nó đánh dấu nơi văn bản dừng lại. Từ
"hi"chiếm ba byte:'h','i','\0'. - Các hàm biết khi nào chuỗi đã kết thúc khi chúng chạm đến
'\0'— không có độ dài được lưu trữ.
Walking a string
- To visit each character, loop an index while
s[i] != '\0'. - When
s[i]becomes'\0', you have reached the end — stop. - This is how you count characters, search, or copy a string by hand.
Duyệt qua chuỗi
- Để truy cập từng ký tự, hãy lặp chỉ số trong khi
s[i] != '\0'. - Khi
s[i]trở thành'\0', bạn đã đến cuối — hãy dừng lại. - Đây chính là cách bạn đếm ký tự, tìm kiếm hoặc sao chép chuỗi bằng tay.
#include <stdio.h>
int main(void) {
char word[] = "hello";
int len = 0;
while (word[len] != '\0') { // stop at the terminator
len++;
}
printf("%d\n", len); // 5
return 0;
}
The <string.h> toolbox
<string.h>has ready-made helpers:strlen(s)(length),strcpy(dst, src)(copy),strcmp(a, b)(compare),strcat(dst, src)(join).strcmp(a, b)returns0when the two strings are equal — handy in tests.- These all rely on the
'\0'terminator to know where each string ends.
Bộ dụng cụ <string.h>
<string.h>có sẵn các trợ thủ:strlen(s)(chiều dài),strcpy(dst, src)(sao chép),strcmp(a, b)(so sánh),strcat(dst, src)(ghép nối).strcmp(a, b)trả về0khi hai chuỗi bằng nhau — rất tiện lợi trong các bài kiểm tra.- Tất cả những thứ này đều dựa vào ký tự kết thúc
'\0'để biết vị trí kết thúc của mỗi chuỗi.
Common mistakes
- A string needs one extra byte for
\0: a 5-letter word needschar[6]. - Compare strings with
strcmp, not==.
Lỗi thường gặp
- Một chuỗi cần thêm một byte cho
\0: một từ 5 chữ cái cầnchar[6]. - So sánh chuỗi với nhau bằng
strcmp, chứ không phải==.
Now you try
- To change a string in place, the caller must pass a writable
chararray, not a fixed text. - Stop your loops at
'\0'. Do not write amain— the checker provides one.
Bây giờ bạn thử
- Để thay đổi chuỗi tại chỗ, người gọi phải truyền vào một mảng
charcó thể ghi, chứ không phải văn bản cố định. - Dừng vòng lặp của bạn tại
'\0'. Đừng viết mộtmain— trình kiểm tra sẽ tự động cung cấp.
Strings are arrays of characters · Chuỗi là mảng các ký tự
Index each character from 0; the slice shows a range of chars. · Chỉ mục từng ký tự bắt đầu từ 0; phần cắt hiển thị một phạm vi các ký tự.
Complete int count_char(const char *s, char c) so it returns how many times c appears in the string s. Loop until you reach the end of the string. Do not write a main. · Hoàn thiện int count_char(const char *s, char c) sao cho trả về số lần xuất hiện của ⟨c⟩ trong chuỗi ⟨s⟩. Lặp cho đến khi đạt cuối chuỗi. Đừng viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Complete int my_strlen(const char *s) so it returns the length of s without calling strlen. Walk the array until you reach the end. Do not write a main. · Hoàn thiện int my_strlen(const char *s) sao cho trả về độ dài của ⟨s⟩ không gọi ⟨strlen⟩. Duyệt qua mảng cho đến khi đạt cuối. Đừng viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Complete void reverse_str(char *s) so it reverses the characters of s in place. Find the length, then swap from both ends toward the middle. Do not write a main. · Hoàn thiện void reverse_str(char *s) sao cho đảo ngược các ký tự của ⟨s⟩ ngay tại chỗ. Tìm độ dài, sau đó hoán đổi từ hai đầu tiến về phía giữa. Đừng viết một main.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.