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ụ:

char name[] = "Diep";

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:

char name[10] = "Diep";

Ở đâ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ự

char str[] = "Hello C";

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

char str[20] = "Hello";

Ư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ự

char str[] = {'H', 'e', 'l', 'l', 'o', '\0'};

Í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

char *str = "Hello";

Ở đâ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:

str[0] = 'h'; // Lỗi

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ímhiển thị ra màn hình.

1. Sử dụng printfscanf

char name[50]; printf("Nhap ten: "); scanf("%s", name); printf("Xin chao %s\n", name);

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

fgets(name, sizeof(name), stdin);

Ư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

puts(name); printf("%s", name);

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

int len = strlen("Hello"); // Kết quả: 5

Không tính ký tự '\0'.

2. strcpy() – sao chép chuỗi

char src[] = "Gozic"; char dest[10]; strcpy(dest, src);

Chú ý: mảng dest phải đủ lớn để chứa toàn bộ chuỗi.

3. strcat() – nối chuỗi

char a[20] = "Hello "; char b[] = "World"; strcat(a, b); // Kết quả: "Hello World"

4. strcmp() – so sánh chuỗi

if (strcmp("abc", "abc") == 0) printf("Hai chuoi bang nhau");

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()strstr()

  • strchr(s, c) → tìm ký tự c trong chuỗi s.

  • strstr(s1, s2) → tìm chuỗi s2 trong s1.

Ví dụ:

char *p = strstr("Lap trinh C", "trinh");

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ự:

for (int i = 0; str[i] != '\0'; i++) { printf("%c ", str[i]); }

Ví dụ đếm số ký tự viết hoa:

int count = 0; for (int i = 0; str[i] != '\0'; i++) { if (str[i] >= 'A' && str[i] <= 'Z') count++; } printf("So chu hoa: %d", count);

Biến đổi chữ thường thành chữ hoa:

for (int i = 0; str[i] != '\0'; i++) { if (str[i] >= 'a' && str[i] <= 'z') str[i] -= 32; }

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ụ:

char name[] = "Diep"; char *ptr = name; printf("%c", *(ptr + 1)); // i

Bạn có thể duyệt chuỗi bằng con trỏ thay vì chỉ số:

char *p = name; while (*p != '\0') { printf("%c", *p); p++; }

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ụ:

void printStr(char *s) { while (*s) putchar(*s++); }

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:

  1. Quên ký tự kết thúc '\0'
    → Chuỗi không xác định điểm kết thúc, dễ crash.

  2. Tràn bộ nhớ (buffer overflow)
    → Dùng scanf("%s", str) nhưng không kiểm soát độ dài.
    ✅ Giải pháp: dùng fgets(str, sizeof(str), stdin) hoặc scanf("%49s", str).

  3. Gán chuỗi cho con trỏ không hợp lệ

    char *str; strcpy(str, "Hello"); // Lỗi vì str chưa trỏ đến vùng nhớ hợp lệ
  4. So sánh chuỗi bằng ==
    → So sánh địa chỉ, không so nội dung.
    ✅ Dùng strcmp(str1, str2).

  5. Không giải phóng bộ nhớ khi dùng malloc
    → Dẫn đến rò rỉ bộ nhớ.
    ✅ Luôn free() 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:

#include <stdio.h> #include <string.h> #include <ctype.h> int main() { char str[200]; printf("Nhap chuoi: "); fgets(str, sizeof(str), stdin); int count = 0, inWord = 0; for (int i = 0; str[i] != '\0'; i++) { if (isspace(str[i])) inWord = 0; else if (!inWord) { inWord = 1; count++; } } printf("So tu: %d\n", count); return 0; }

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:

char *str = malloc(100 * sizeof(char)); if (str == NULL) return 1; strcpy(str, "Lap trinh C"); printf("%s\n", str); free(str);

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

Video - Nhập môn cho người mới bắt đầu - Lập trình C
Video Flowchart & ví dụ viết flowchart của phương trình bậc 1 - Lập Trình C
Vẽ FlowChart Phương Trình Bậc 1 & Phương Trình Bậc 2
Bài tập - cài đặt môi trường lập trình C + tạo dự án đầu tay
Video Hướng dẫn cài đặt môi trường lập trình C - Lập trình C
Tạo dự án đầu tiên - In ra thông tin cá nhân
Video Tìm hiểu biến & kiểu dữ liệu trong C - Lập trình C
Bài tập - Chuyển flowchart sang code - Lập trình C

Video Toán tử & biểu thức login trong C - Lập Trinh C
Video Nhập dữ liệu trong C (scanf, printf) - Lập trình C
Video Nhập xuất dữ liệu phần 2 - Lập Trình C
Bài tập - Nhập xuất thông tin sinh viên - Lập trình C
Video Bài tập - Nhập xuất thông tin sinh viên - Lập trình C
Bài tập - Ôn tập biến + kiểu dữ liệu + scanf & printf - Lập trình C
Bài tập - ôn tập nhật xuất và biểu tức toán học - Lập trình C

Video Tìm hiểu if, else, switch trong lập trình C - Lập Trình C
Bài tập - Giải phương trình bậc 1 - giải phương trình bậc nhất - Lập trình C
Bài tập - Tìm min & max - số lớn nhất & nhỏ nhất - Lập trình C
Bài tập - Giải hệ phương trình bậc nhất nhất 2 ẩn - Lập trình C
Bài tập - Giải phương trình bậc 2 - Lập trình C

Video Tìm hiểu về vòng lặp for trong C - Lập trình C
Video Tìm hiểu while, do..while trong lập trình C - lập Trình C
Ôn tập While, Do .. While, For lập trình C - Lập trình C
Fibonacci - Lập trình C
Video - Hướng dẫn chữa bài Fibonaci - Lập Trình C
Loop - Switch case - Chương trình quản lý sinh viên - Lập trình C
[Test] Kiểm tra 60 phút - if, else, switch, loop trong C - Lập trình C

Video Tìm hiểu mảng 1 chiều trong C - Lập trình C
Video Tìm hiểu mảng 2 chiều - Lập Trình C
Tính tổng mảng N phần tử - Lập trình C
Bài tập ôn luyện mảng 1 chiều - Lập trình C
Video Bài tập ôn luyện mảng 1 chiều - Lập trình C
Tách phần tử chẵn + lẻ trong C - Lập trình mảng trong C - Lập trình C
Bài tập tổng quát - quản lý mảng số nguyên - Lập trình C
Bài toán sắp xếp trong C - Lập trình C
Loop - Viết chương trình Reserve chuỗi - Lập trình C

Video Tìm hiểu pointer phần 1 - Lập Trình C
Video Tìm hiểu pointer phần 2 - Lập Trình C
Video Tìm hiểu pointer phần 3 - Lập trình C
Bài toán pointer đầu tiên - Hello pointer - Lập trình C
Bài tập pointer nâng cao - cấp phát động - Lập trình C
Bài tập nâng cao pointer - Lập trình C
Video Ôn luyện - Sắp xếp trong C, con trỏ cấp phát động

Video Tìm hiểu function trong lập trình C - Lập Trình C
Ôn tập function - viết chương trình máy tính - Lập trình C
Bài tập ôn luyện Function - Lập trình C
Video Tìm hiểu string trong lập trình C - Lập Trình C
[Nâng cao] Tìm kiếm chuỗi trong chuỗi - Lập trình C
Bài tập ôn tập String - Lập trình C
Video Bài tập ôn tập String - Lập trình C
Video Tìm hiểu Struct trong C | Khóa học lập trình C
Bài tập - Quản lý hình chữ nhật - struct trong C - Lập trình C
Bài tập FILE - Lập trình C
[Test] Kiểm tra 60 phút - Lập trình C

Quản lý rạp chiếu phim quốc gia - Assignment - Lập trình C
Video Hướng dẫn chừa bài tập quản lý rạp chiều phím - Lập trình C
Quản lý sinh viên 2 - Assigment - Lập trình C
Video Quản lý tranh - quản lý gallery - Lập trình C
Quản lý motobike - Quản lý xe cộ - Lập trình C
Quản lý đồ điện tử - Lập trình C
Video Chương trình quản lý tỷ phú bằng C | Khóa học lập trình C
1000+ Bài Tập Lập Trình C Từ Cơ Bản Đến Nâng Cao
Nguyễn Văn An
Nguyễn Văn An
2026-06-22 12:48:44
Khóa học cực kỳ chất lượng, giảng viên hướng dẫn rất chi tiết và dễ hiểu. Mình đã áp dụng được ngay vào công việc thực tế.
Trần Thị Bích
Trần Thị Bích
2026-06-19 12:48:44
Nội dung bài giảng được sắp xếp logic, đi từ cơ bản đến nâng cao. Rất phù hợp cho người mới bắt đầu.
Lê Hoàng Hải
Lê Hoàng Hải
2026-06-17 12:48:44
Khóa học hay, tuy nhiên phần bài tập thực hành hơi khó một chút. Cần phải xem lại video vài lần mới làm được.
Phạm Minh Tuấn
Phạm Minh Tuấn
2026-06-10 12:48:44
Tuyệt vời! Đây là khóa học tốt nhất mình từng tham gia. Support nhiệt tình, giải đáp thắc mắc rất nhanh.

Đánh giá

B1. B1. Tạo tài khoản -> Sử dụng để học online
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

Chào mừng các anh chị và các bạn gia nhập đội ngũ Giảng viên QViet. Anh chị vui lòng đăng ký theo hướng dẫn sau:
Bước 1: Truy cập website https://gozic.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!
×