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);
viết 18:26 ngày 30/09/2018
#include <fstream>
#include <streambuf>

std::ifstream t("file.txt");
std::string str;

t.seekg(0, std::ios::end);   
str.reserve(t.tellg());
t.seekg(0, std::ios::beg);

str.assign((std::istreambuf_iterator<char>(t)),
            std::istreambuf_iterator<char>());

Đọc nguyên file vào string luôn, ngại gì vết bẩn

Nguồn:

stackoverflow.com
Escualo

Read whole ASCII file into C++ std::string

c++, string, caching, file-io
asked by Escualo on 05:19PM - 08 Apr 10

stackoverflow.com
sonofdelphi

Read file-contents into a string in C++

c++, string, file-io
asked by sonofdelphi on 11:36AM - 26 May 10

Nguyễn Minh Dũng viết 18:19 ngày 30/09/2018

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

Bài liên quan
0