Hàm fgets() trong C

Fgets là gì? Fgets trong C được dùng như thế nào? Hãy cùng nhau tìm hiểu cách dùng hàm fgets trong C nhé!

Hàm char *fgets(char *str, int n, FILE *stream) trong Thư viện C chuẩn đọc một dòng từ Stream đã cho và lưu trữ nó vào trong chuỗi được trỏ bởi str. Nó dừng khi gặp bất cứ điều kiện nào sau: (n-1) ký tự đã được đọc, ký tự newline (dòng mới) được đọc hoặc bắt gặp end-of-file.

Khai báo hàm fgets() trong C

Dưới đây là phần khai báo cho hàm fgets() trong C:

char *fgets(char *str, int n, FILE *stream)

Tham số

str -- Đây là con trỏ tới một mảng các char nơi chuỗi được đọc được lưu trữ.

n -- Đây là số ký tự tối đa được đọc (bao gồm ký tự null cuối cùng). Thường thì độ dài của mảng đã truyền là str được sử dụng.

stream -- Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream, nơi mà các ký tự được đọc từ đó.

Trả về giá trị

Nếu thành công, hàm trả về cùng tham số str. Nếu bắt gặp EOF và không có ký tự nào đã được đọc, nội dung của str vẫn không thay đổi và một con trỏ null được trả về.

Nếu một lỗi xuất hiện, một con trỏ null được trả về.

Ví dụ

Chương trình C sau minh họa cách sử dụng của hàm fgets() trong C:

#include <stdio.h>

int main()
{
   FILE *fp;
   char str[60];

   /* mo file de doc */
   fp = fopen("baitapc.txt" , "r");
   if(fp == NULL) 
   {
      perror("Xay ra loi trong khi doc file");
      return(-1);
   }
   if( fgets (str, 60, fp)!=NULL ) 
   {
      /* Ghi noi dung len stdout */
      puts(str);
   }
   fclose(fp);
   
   return(0);
}

Giả sử chúng ta có baitapc.txt với nội dung sau. File này sẽ được sử dụng như là input cho chương trình C ví dụ:

Đặt file có tên

Biên dịch và chạy chương trình C trên sẽ cho kết quả:

Kết quả sau khi chạy chương trình

So sánh gets() và fgets()

Tính năng

gets()

fgets()

Kiểm soát kích thước bộ đệm

Không kiểm soát kích thước có thể bị tràn bộ đệm

Cho phép kiểm soát kích thước, ngăn tràn bộ đệm

Xử lý dòng mới

Bỏ ký tự xuống dòng

Giữ nguyên ký tự xuống dòng

Nguồn đầu vào

Chỉ có thể đọc từ stdin

Có thể đọc từ nguồn nhập bất kỳ, bao gồm stdin.

Xử lý lỗi

Không thể phát hiện lỗi hay EOF nên không có cách xử lý lỗi đọc

Trả về NULL khi gặp lỗi hoặc EOF, vì thế, có thể xử lý hiệu quả lỗi đọc

Trạng thái

Không còn được sử dụng trong C11 trở lên

Được đề xuất và sử dụng rộng rãi

Những câu hỏi thường gặp về hàm fgets() trong C

Điều gì xảy ra nếu đầu vào vượt quá kích thước bộ đệm trong fgets()?

Nếu độ dài đầu vào vượt quá n-1 ký tự, fgets() sẽ dừng đọc ở n-1 ký tự, để lại phần đầu vào còn lại trong bộ đệm. Phần đầu vào còn lại này có thể được đọc trong các lệnh gọi tiếp theo tới fgets().

Tại sao chuỗi được fgets() đọc đôi khi nhỏ hơn kích thước đã cho?

Nếu đầu vào ngắn hơn n-1 hoặc kết thúc bằng ký tự xuống dòng, chuỗi kết quả sẽ xuất hiện nhỏ hơn.

Bài trước: Hàm fgetc() trong C

Bài tiếp: Hàm fputc() trong C

Thứ Tư, 12/03/2025 15:04
52 👨 66.296
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    ❖ Lập trình C
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng