沃斯戈-莎比 发表于 2023-11-17 11:26:59

scanf底层原理

想知道scanf底层原理      自己写一个简易版的scanf      就是比如是   这个scanf("%c",&opmsg)    他是不是scanf函数先读取输入缓冲区中的数据再存入到这个引用地址的位置       scanf函数读取输入缓冲区中的数据 他是从什么位置开始读取的他是通过什么方式来确定他读取的位置的呢             或者知道偏移量的也可以讲一下   有没有同学知道去哪里可以找到这些

isdkz 发表于 2023-11-17 11:27:09

scanf函数是C语言中用来从标准输入流中读取格式化输入的函数。其底层原理涉及到输入缓冲区、格式化字符串的解析和内存地址的写入等方面。

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

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

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

关于scanf函数的底层原理,可以在C标准库的实现中找到相关的源代码。例如,可以查看GNU C库(glibc)的源代码,以了解scanf函数的具体实现细节。

Mike_python小 发表于 2023-11-17 11:29:42

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

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

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

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

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

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

自己编写一个简易版的scanf函数需要深入理解以上原理,并在代码中实现相应的逻辑。关于scanf函数的更多细节和原理,你可以查阅C/C++的相关书籍或者官方文档,比如C++标准库参考手册或者《C程序设计语言》等经典著作。
页: [1]
查看完整版本: scanf底层原理