题目意思是给你一个read4的函数,实现一个readn的函数。
一开始题目一直没搞懂,原来,read4(buf) 是指,读4个字符存到buf,或者读剩下的不足四个的字符,返回的数字是存到buf里的字符数。
没有买书,只能网上看看 别人 分享的代码:
//
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) {
char
buffer[
5
];
int
cnt =
0
;
while
(cnt <
n) {
int
sz =
read4(buffer);
memcpy(buf
+
cnt, buffer, sz);
cnt
+=
sz;
if
(sz <
4
)
break
;
}
if
(cnt >
n) {
buf[n]
=
'
\0
'
;
cnt
=
n;
}
return
cnt;
}
};
需要注意的是,跳出while后,需要判断读的数字是不是超过n了,因为我们只实现readn,要返回的数字最多就是n,存到buf里的也最多是n个字符。
所以如果cnt大于n了,那么buf里面就要将buf[n]设置为末尾也就是‘\0’
顺便提下,memcpy在<string.h>头文件里,是c的,应该可以用strncpy代替

