fread实现getchar(加速!!!)
fread实现的getchar代码:
inline char get() { static char buf[100000], *p1 = buf, *p2 = buf; return p1 == p2 && (p2 = (p1 = buf) + fread(buf,1,100000,stdin),p1 == p2) ? EOF : *p1 ++; }
以下内容由chatgpt生成:
上面的代码定义了一个名为get()
的内联函数,它从标准输入读取字符并返回。
首先,该函数使用了一个静态字符数组buf
,大小为100000。静态数组意味着它在函数调用之间保持不变,所以每次调用get()
函数时,buf
的内容会保留,而不会重新分配内存。
然后,函数定义了两个指针变量p1
和p2
,并将它们初始化为指向buf
的首地址。这两个指针变量用于指示当前已经读取的字符位置。
接下来,函数返回一个表达式的结果,该表达式首先检查p1
是否等于p2
,这意味着当前的字符已经全部被读取完毕,需要重新从标准输入读取。如果是这种情况,以下操作将被执行:
- 将
buf
重新填充为从标准输入读取的字符,最多读取100000个字符。 - 将
p1
和p2
分别重置为buf
的首地址,并检查p1
是否等于p2
。如果仍然相等,意味着文件结束,返回EOF。 - 否则,返回
p1
所指向的字符,并将p1
向前移动一个位置,以指示下一个要返回的字符。
如果p1
和p2
不相等,即还有未读取的字符,那么返回p1
所指向的字符,并将p1
向前移动一个位置。
这样,每次调用get()
函数时,它将返回标准输入中的下一个字符,并且在内部会自动处理缓冲区的读取和填充。
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现