30/09/2018, 16:14
[Wiki] Đọc file từng dòng mà không cần biết chiều dài của dòng trong C
Nguyên tắc thực hiện là sẽ đọc từng ký tự một, cho tới khi gặp xuống hàng
hoặc EOF
.
int eof_or_line_break(char c) // Kiểm tra xuống hàng hoặc EOF
{
return (c == '
' || c == EOF);
}
// cho phép nhập vào max_len để đề phòng lỗi khi dòng quá dài, vượt qua kích thước chuỗi
int readline(char * line, int max_len, FILE *fp)
{
char c;
int i = 0;
// nếu không phải eof_or_line_break hoặc quá dài
while( !eof_or_line_break(c = fgetc(fp)) && i < max_len - 1)
line[i++] = c;
line[i] = 0; // kết thúc chuỗi
if (i == max_len - 1) // neu line dai hon max_len
while( (c = fgetc(fp)) != '
') // bo het doan phia sau
;
return i; // số byte đã đọc, không tính kết thúc chuỗi
}
Cách sử dụng
#define MAX_LEN 10
FILE * fp = fopen("input","r");
char line[MAX_LEN];
readline(line, MAX_LEN, fp);
Bài liên quan
Đọc nguyên file vào string luôn, ngại gì vết bẩn
Nguồn:
stackoverflow.com
Read whole ASCII file into C++ std::string
Read file-contents into a string in C++
Cái này C mà. Nhưng mà cũng có cách đọc hết toàn bộ vào char, dùng
realloc
để cấp vùng nhớ nếu thiếu