鱼C论坛

 找回密码
 立即注册
查看: 956|回复: 2

scanf底层原理

[复制链接]
发表于 2023-11-17 11:26:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想知道scanf底层原理      自己写一个简易版的scanf        就是比如是   这个scanf("%c",&opmsg[opnd_cnt*OPSZ+1])    他是不是scanf函数先读取输入缓冲区中的数据再存入到这个引用地址的位置       scanf函数读取输入缓冲区中的数据 他是从什么位置开始读取的  他是通过什么方式来确定他读取的位置的呢             或者知道偏移量的也可以讲一下     有没有同学知道去哪里可以找到这些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-17 11:27:09 | 显示全部楼层
scanf函数是C语言中用来从标准输入流中读取格式化输入的函数。其底层原理涉及到输入缓冲区、格式化字符串的解析和内存地址的写入等方面。

scanf函数首先会从标准输入流中读取输入,这些输入会被存储在输入缓冲区中。然后,scanf函数会根据提供的格式化字符串来解析输入,识别出对应的数据类型,并将数据存储到相应的地址中。

对于给定的示例scanf("%c",&opmsg[opnd_cnt*OPSZ+1]),这表示要读取一个字符并存储到opmsg数组中的特定位置。opnd_cnt*OPSZ+1是一个地址偏移量,表示要存储的位置在opmsg数组中的偏移量。

scanf函数会根据格式化字符串中的指示,从输入缓冲区中读取数据,并根据偏移量计算出要存储的地址,然后将读取到的数据存储到该地址中。

关于scanf函数的底层原理,可以在C标准库的实现中找到相关的源代码。例如,可以查看GNU C库(glibc)的源代码,以了解scanf函数的具体实现细节。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-17 11:29:42 | 显示全部楼层
scanf函数的底层原理涉及到输入缓冲区、格式化字符串解析以及数据存储等方面。下面我将简要介绍一下scanf函数的工作原理,并给出一个简单的示例来说明它是如何读取输入数据并存入指定地址的。

1. 输入缓冲区:当用户输入数据时,输入数据会被存储在输入缓冲区中,等待程序读取。

2. 格式化字符串解析:scanf函数通过格式化字符串来指示要读取的数据类型和存储位置。格式化字符串中的格式说明符指示了要读取的数据类型,如"%c"表示字符类型。

3. 读取过程:scanf函数按照格式化字符串的指示从输入缓冲区中读取数据。它会跳过空白字符(例如空格、制表符、换行符等),然后根据格式说明符逐个字符地匹配输入缓冲区中的数据,直到匹配失败或者读取完所有的格式说明符为止。

4. 存储位置:scanf函数将读取到的数据存储到指定的地址上。在你提供的例子中,"&opmsg[opnd_cnt*OPSZ+1]"表示了存储位置,即数组opmsg中的特定位置。

5. 偏移量:在你的例子中,opnd_cnt*OPSZ+1表示了一个偏移量,它可以用来计算出要存储数据的确切位置在数组中的哪个位置。

自己编写一个简易版的scanf函数需要深入理解以上原理,并在代码中实现相应的逻辑。关于scanf函数的更多细节和原理,你可以查阅C/C++的相关书籍或者官方文档,比如C++标准库参考手册或者《C程序设计语言》等经典著作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表