# 157 Read N Characters Given Read4

The API:`int read4(char *buf)`reads 4 characters at a time from a file.

The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.

By using the`read4`API, implement the function`int read(char *buf, int n)`that readsncharacters from the file.

**Note:**\
The`read`function will only be called once for each test case.

**The Idea:** Buffer in 4 characters at a time until we either run out of characters to read, or the amount we read exceeds n. Modify the nth buffer to be the empty character for any offset issues.

**Complexity:** O(n/4) time and O(1) space

```cpp
// Forward declaration of the read4 API.
int read4(char *buf);


class Solution {
public:
    /**
    * @param buf Destination buffer
    * @param n Maximum number of characters to read
    * @return The number of characters read
    */
    int read(char *buf, int n) {
        int total_read = 0;
        int cur_read = 0;
        do {
            cur_read = read4(buf + total_read);
            total_read += cur_read;
        } while (cur_read == 4 && total_read < n);
        buf[n] = '\0';
        return total_read;
    }
};
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://maksimdan.gitbook.io/interview-practice-problems/leetcode_sessions/157-read-n-characters-given-read4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
