// 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) {
if (n == 0)
return 0;
int num, ret, temp;
// remember to create tmp with size larger than 4
char tmp[5];
ret = 0;
// make sure all the bytes set by read4 can be stored in buffer correctly, not overflow
while (ret + 4 < n) {
// remember buffer should be moved before transimit to read4
num = read4(buf+ret);
ret += num;
// this means it has already read all the data
if(num != 4) {
return ret;
}
}
// Last several bytes should be condsider seperately.
if (ret + 4 >= n) {
// use another buffer to store the
temp = read4(tmp);
if (temp == 0)
return ret;
temp = (n-ret) < temp ? (n-ret) : temp;
for (int i = 0; i < temp; i++) *(buf + ret + i) = *(tmp + i);
ret += temp;
return ret;
}
}
};
注意几个注释地方的问题!