Khoá học lập trình C/C++ Dành cho người mới bắt đầu [Video] Tìm hiểu string trong lập trình C - Lập Trình C
- 5.0/5.0
- 2k Đăng ký
- Học lập trình
- Tiếng việt
Thông tin khóa học
Mở bài
Trong ngôn ngữ lập trình C, string (chuỗi ký tự) là một trong những khái niệm nền tảng nhưng cũng dễ gây nhầm lẫn cho người mới học. Khác với nhiều ngôn ngữ hiện đại như Python, Java hay JavaScript – nơi chuỗi được xem như một kiểu dữ liệu có sẵn (built-in type) – thì trong C, string thực chất chỉ là một mảng các ký tự kết thúc bằng ký tự đặc biệt '\0'. Chính vì cách tổ chức “thủ công” này mà lập trình viên cần hiểu rõ cách hoạt động của bộ nhớ, con trỏ, và thao tác với mảng để sử dụng string hiệu quả, tránh lỗi tràn bộ nhớ hay truy cập vùng nhớ không hợp lệ.
Hiểu rõ string trong lập trình C giúp bạn làm chủ các thao tác nhập – xuất dữ liệu, xử lý chuỗi, và xây dựng ứng dụng có tính ổn định cao. Bài viết này sẽ hướng dẫn chi tiết từ khái niệm cơ bản đến các thao tác nâng cao như khai báo, gán giá trị, duyệt chuỗi, nối chuỗi, so sánh chuỗi, cũng như sử dụng thư viện <string.h>. Ngoài ra, bạn còn học được các lời khuyên thực tế giúp hạn chế lỗi và tối ưu chương trình.
Cùng bắt đầu khám phá thế giới string trong ngôn ngữ C – nơi mỗi ký tự đều có ý nghĩa, và việc hiểu sâu về chúng sẽ giúp bạn trở thành lập trình viên C thực thụ!
Khái niệm cơ bản về string trong C
Trong ngôn ngữ C, string (chuỗi) không phải là kiểu dữ liệu riêng biệt, mà được biểu diễn bằng một mảng các ký tự (char array). Mỗi ký tự chiếm 1 byte trong bộ nhớ, và chuỗi luôn kết thúc bằng ký tự đặc biệt '\0' – được gọi là null terminator, đánh dấu kết thúc chuỗi.
Ví dụ:
Trong bộ nhớ, chuỗi này được lưu như sau:
| D | i | e | p | \0 |
Tổng cộng 5 byte, trong đó 4 ký tự và 1 ký tự kết thúc. Nếu bạn quên '\0', C sẽ không biết nơi kết thúc chuỗi, dẫn đến lỗi hoặc hiển thị ký tự rác.
Một cách khai báo khác:
Ở đây, mảng name có 10 ô, nhưng chỉ 5 ô được dùng. Phần còn lại chứa giá trị không xác định. Đây là cách phổ biến khi bạn muốn để sẵn không gian cho chuỗi dài hơn trong tương lai.
Điểm quan trọng:
-
Mỗi chuỗi là một mảng char.
-
Luôn có
'\0'ở cuối. -
Nếu quên ký tự kết thúc, chương trình có thể chạy sai hoặc bị crash.
Cách khai báo và khởi tạo string
Có nhiều cách để khai báo và khởi tạo chuỗi trong C. Dưới đây là những hình thức phổ biến nhất:
1. Khai báo trực tiếp bằng chuỗi ký tự
C tự động tính độ dài và thêm '\0'. Đây là cách an toàn, ngắn gọn.
2. Khai báo với kích thước xác định
Ưu điểm: bạn có thể thay đổi giá trị chuỗi sau này.
Nhược điểm: phải đảm bảo kích thước đủ lớn để chứa toàn bộ chuỗi + '\0'.
3. Khai báo từng ký tự
Ít dùng hơn, nhưng giúp bạn hiểu rõ cách string được lưu trữ.
4. Con trỏ tới chuỗi hằng
Ở đây, "Hello" là chuỗi hằng (constant string). Bạn không được phép sửa nội dung của chuỗi này, nếu làm vậy sẽ gây lỗi runtime.
Ví dụ sai:
Lời khuyên:
Khi cần thay đổi nội dung chuỗi, hãy dùng mảng. Khi chỉ cần đọc, có thể dùng con trỏ để tiết kiệm bộ nhớ.
Nhập và xuất chuỗi trong C
Để làm việc thực tế, bạn phải biết cách nhập dữ liệu chuỗi từ bàn phím và hiển thị ra màn hình.
1. Sử dụng printf và scanf
Tuy nhiên, scanf("%s", ...) không đọc được chuỗi có khoảng trắng, vì nó dừng khi gặp dấu cách hoặc xuống dòng.
2. Sử dụng fgets
Ưu điểm: đọc được cả chuỗi có khoảng trắng.
Nhược điểm: lưu cả ký tự xuống dòng \n, cần xóa thủ công.
3. In chuỗi
Lưu ý khi nhập chuỗi:
-
Không dùng
gets()vì hàm này không kiểm soát độ dài, dễ gây tràn bộ nhớ (buffer overflow). -
Dùng
fgets()là lựa chọn an toàn hơn.
Các hàm xử lý chuỗi trong thư viện <string.h>
Thư viện <string.h> cung cấp hàng chục hàm giúp bạn thao tác với chuỗi nhanh chóng và an toàn hơn.
1. strlen() – tính độ dài chuỗi
Không tính ký tự '\0'.
2. strcpy() – sao chép chuỗi
Chú ý: mảng dest phải đủ lớn để chứa toàn bộ chuỗi.
3. strcat() – nối chuỗi
4. strcmp() – so sánh chuỗi
Trả về:
-
0: hai chuỗi giống nhau
-
<0: chuỗi 1 nhỏ hơn chuỗi 2
-
0: chuỗi 1 lớn hơn chuỗi 2
5. strchr() và strstr()
-
strchr(s, c)→ tìm ký tựctrong chuỗis. -
strstr(s1, s2)→ tìm chuỗis2trongs1.
Ví dụ:
6. strncpy, strncat, strncmp
Đây là các phiên bản an toàn hơn, có giới hạn độ dài. Nên ưu tiên dùng để tránh tràn bộ nhớ.
Duyệt và xử lý từng ký tự trong chuỗi
Đôi khi, bạn muốn thao tác từng ký tự – ví dụ đếm chữ cái, đổi hoa thường, xóa ký tự đặc biệt,...
Ví dụ duyệt từng ký tự:
Ví dụ đếm số ký tự viết hoa:
Biến đổi chữ thường thành chữ hoa:
Các thao tác kiểu này giúp bạn rèn luyện tư duy xử lý chuỗi và hiểu rõ cách chuỗi hoạt động ở mức byte.
String và con trỏ: mối quan hệ mật thiết
Chuỗi và con trỏ trong C có mối liên hệ chặt chẽ, bởi tên mảng thường được coi là con trỏ tới phần tử đầu tiên.
Ví dụ:
Bạn có thể duyệt chuỗi bằng con trỏ thay vì chỉ số:
Khi hiểu con trỏ, bạn có thể viết các hàm xử lý chuỗi mạnh mẽ hơn, ví dụ:
Lưu ý: con trỏ chuỗi phải trỏ đến vùng nhớ hợp lệ. Nếu trỏ tới NULL hoặc vùng chưa cấp phát, chương trình sẽ lỗi.
Tránh lỗi thường gặp khi làm việc với string
Khi mới học C, lập trình viên thường gặp các lỗi liên quan đến chuỗi. Dưới đây là danh sách lỗi phổ biến và cách khắc phục:
-
Quên ký tự kết thúc
'\0'
→ Chuỗi không xác định điểm kết thúc, dễ crash. -
Tràn bộ nhớ (buffer overflow)
→ Dùngscanf("%s", str)nhưng không kiểm soát độ dài.
✅ Giải pháp: dùngfgets(str, sizeof(str), stdin)hoặcscanf("%49s", str). -
Gán chuỗi cho con trỏ không hợp lệ
-
So sánh chuỗi bằng
==
→ So sánh địa chỉ, không so nội dung.
✅ Dùngstrcmp(str1, str2). -
Không giải phóng bộ nhớ khi dùng
malloc
→ Dẫn đến rò rỉ bộ nhớ.
✅ Luônfree()sau khi dùng.
Ví dụ thực tế: đếm số từ trong chuỗi
Một bài tập kinh điển khi học string trong lập trình C là đếm số từ có trong chuỗi nhập vào:
Giải thích:
-
Duyệt từng ký tự, kiểm tra có phải khoảng trắng không.
-
Mỗi khi bắt đầu một từ mới (chữ không phải khoảng trắng sau khoảng trắng), tăng
count.
Bài này giúp bạn rèn luyện kỹ năng thao tác chuỗi, hiểu rõ ký tự và cách dùng hàm isspace() trong <ctype.h>.
Mở rộng: string động với malloc
Khi không biết trước độ dài chuỗi, bạn có thể cấp phát động:
Cấp phát động giúp bạn linh hoạt với dữ liệu lớn hoặc đọc file. Tuy nhiên, cần quản lý bộ nhớ cẩn thận để tránh memory leak.
Kết luận
Chuỗi (string) là linh hồn của xử lý dữ liệu trong lập trình C. Dù C không có kiểu dữ liệu “chuỗi” sẵn như các ngôn ngữ bậc cao khác, việc hiểu và làm chủ string trong lập trình C mang lại cho bạn quyền kiểm soát tuyệt đối với bộ nhớ, hiệu suất và cấu trúc chương trình. Qua bài viết này, bạn đã nắm được:
-
Cách khai báo, khởi tạo, nhập và xuất chuỗi.
-
Các hàm xử lý chuỗi phổ biến trong
<string.h>. -
Cách kết hợp con trỏ và mảng để thao tác linh hoạt.
-
Các lỗi thường gặp và cách phòng tránh.
Bây giờ, hãy tự mình thử viết chương trình xử lý chuỗi: nối chuỗi, đảo chuỗi, đếm ký tự,… Mỗi lần thực hành, bạn sẽ hiểu sâu hơn cách C hoạt động với bộ nhớ và con trỏ. Thành thạo chuỗi không chỉ giúp bạn học tốt lập trình C, mà còn mở đường để làm việc với các ngôn ngữ hệ thống khác như C++ hay Rust.
Hãy bắt đầu viết, thử sai, và khám phá sức mạnh thật sự của string trong lập trình C!
Đăng nhập để làm bài kiểm tra
Chưa có kết quả nào trước đó
Chương trình
Phản hồi từ học viên
5
Đánh giá
Câu hỏi thường gặp
B2. Đăng ký học
B3. Hoàn thành mua khoá học
B4. Thanh toán theo hướng dẫn
B5. Đợi chúng tôi kiểm tra thông tin và thêm bạn vào lớp học
Bước 1: Truy cập website https://qviet.vn/teacher/form
Bước 2: Điền thông tin theo yêu cầu. Để bản đăng ký được duyệt nhanh nhất, anh chị hãy điền đủ thông tin nhé.
Bước 3: Click vào "đăng ký ngay" để hoàn thành
Lưu ý:
Link video bài giảng mẫu: Video bài giảng mẫu là căn cứ để Trắc Nghiệm Việt duyệt về hình thức và chất lượng giảng dạy. Vì vậy anh chị hãy điền link này để đăng ký được duyệt nhanh nhất nhé.
Anh chị cũng nên mô tả kỹ về kinh nghiệm giảng dạy để Trắc Nghiệm Việt đánh giá nhé.
Chúc các anh chị và các bạn thành công, sớm gia nhập đội ngũ giảng viên Trắc Nghiệm Việt!
Hình thức học như thế nào?
Việc tạo thói quen học tập sẽ giúp bạn tăng khả năng đạt được mục tiêu. Dành thời gian để học và nhận lời nhắc bằng cách sử dụng công cụ quản lý học tập của bạn.Bước 1: Truy cập mục tài khoản, đăng nhập và chọn Quản lý học tập và ấn Thêm lịch học
Bước 2: Cài đặt lịch học tập của bạn:
- Đặt tiêu đề và chọn khóa học muốn tạo lịch học sau đó ấn tiếp tục.
- Cài đặt tần suất học, thời gian học, thời gian bắt đầu học, lịch thông báo nhắc nhở trước lúc bắt đầu học, ngày kết thúc sau đó bạn ấn tiếp tục.
- Bạn kiểm tra lại lịch học tập lần nữa, nếu đúng bạn ấn Hoàn thành.
- Nếu muốn chỉnh sửa, bạn ấn mục Quay lại và chỉnh lại.
- Khi tạo xong bạn có thể ấn thanh ngang bên phải để xóa, sửa lịch học.
Việc lên lịch học sẽ giúp em bạn dễ dàng đạt được các mục tiêu mong muốn, tăng hiệu quả học tập. Đặc biệt, khi bạn học được 90% nội dung khóa học, bạn sẽ nhận chứng nhận hoàn thành khóa học.
Hình thức học tại Trắc Nghiệm Việt
1. Học như thế nào?- Khóa học tại Trắc Nghiệm Việt được học **online** trên điện thoại hoặc máy tính có kết nối Internet.
- Các video bài giảng đã được biên tập sẵn, học viên có thể học bất cứ lúc nào, không giới hạn thời gian và số lần học.
- Chỉ cần đăng ký và thanh toán một lần.
2. Có thể học trên nhiều thiết bị không?
- Học viên có thể đăng nhập và học trên nhiều thiết bị khác nhau (điện thoại, máy tính, máy tính bảng). Tuy nhiên, tại cùng một thời điểm chỉ **một thiết bị** được phép xem video.
- Truy cập website: https://qviet.vn để đăng nhập và học.
- Với điện thoại hoặc máy tính bảng, học viên có thể tải ứng dụng Trắc Nghiệm Việt tại: https://qviet.vn
3. Có thể học trên Smart TV không?
- Trắc Nghiệm Việt đang phát triển để hỗ trợ học trực tiếp trên Smart TV. Hiện tại, tùy theo từng dòng TV mà có thể mở website và học được hoặc không.
- Bạn có thể thử bằng cách mở trình duyệt trên TV và truy cập: https://qviet.vn
- Trải nghiệm học tập tốt nhất hiện nay là trên **điện thoại** và **máy tính**.
4. Thời hạn sử dụng khóa học?
- Sau khi đăng ký, học viên sẽ sở hữu khóa học **vĩnh viễn**, có thể học đi học lại không giới hạn.
5. Có được tải khóa học về thiết bị không?
- Video bài giảng thuộc bản quyền của Trắc Nghiệm Việt và giảng viên. Học viên **không được tải xuống** dưới bất kỳ hình thức nào để tránh việc phát tán trái phép.
- Khóa học là tài sản trí tuệ và công sức của giảng viên, mong học viên hiểu và tôn trọng quyền sở hữu này.
- Bên dưới mỗi video có mục **Thảo luận**, bạn tích chọn và đặt câu hỏi tại đây. Thông thường trong vòng 24h giảng viên sẽ phản hồi lại bạn.
- Để xem câu trả lời của giảng viên, bạn vào mục **Thảo luận** của bài học đã đặt câu hỏi và tích vào mục trả lời để xem.
Học viên có thể liên hệ trực tiếp với giảng viên qua điện thoại, email, Facebook không?
- Khóa học online, giảng viên có hàng nghìn học viên trên cả nước nên việc liên hệ trực tiếp với giảng viên qua điện thoại là không tiện và Trắc Nghiệm Việt cam kết bảo mật thông tin cá nhân của giảng viên.
- Đa phần các khóa học, giảng viên hỗ trợ học viên qua **mục Thảo luận**. Một số khóa học giảng viên có thể hỗ trợ thêm qua email, Facebook, Zalo hoặc nhóm hỗ trợ trên Facebook. Trong những trường hợp này, giảng viên và Trắc Nghiệm Việt sẽ cung cấp thông tin liên hệ phù hợp.
Bình luận
Tổng quan khóa học
- Bài học 67
- Thời gian Linh hoạt
- Mức độ Mới bắt đầu
- Ngôn ngữ Tiếng việt
- Thời lượng Trọn đời
- Chứng chỉ Không
Trần Văn Điệp
Founder tại QViet.vn
- 5.0/5.0
Mình là Điệp, mình là lập trình viên Full Stack. Hiện mình là Senior Developer, mình là người yêu thích lập trình và viết các mã lệnh và yêu thích khi tạo ra những sản phẩm cho mình. Mình luôn thích thú mỗi khi tối ưu lại chức năng của từng chức năng, làm sao để nó trở lên tối ưu và smooth. Làm tăng trải nghiệm người dùng. Mình cũng rất thích tìm hiểu các công nghệ mới, tìm hiểu các tính năng mới trong các bản nâng cấp mới. Mảng mình làm việc lâu nhất là Mobile (Android & iOS). Mình là người thích chia sẻ kiến thức, những gì mình biết đều muốn chia sẻ ra. Blog này cũng là nơi mình chia sẻ các kiến thức và công nghệ mình đã làm trong các dự án. Blog mình hướng tới là chia sẻ kiến thức kết hợp với trải nghiệm thực tế khi làm ở doanh nghiệp.