2016-06-09 34 views
4

我想构建自己的scanf函数。基本思想是从内存地址获取数据并将其保存到另一个内存地址。什么是C语言的标准输入?

什么是stdin?它是像000ffaa这样的内存地址吗? 如果它是一个内存地址是什么,所以我可以建立自己的scanf函数。谢谢!。

+0

看看:http://linux.die.net/man/3/stdin – Missu

+1

在某种意义上,它是类型的指针' FILE *',但是要研究我刚刚提出的两个答案,因为你真的不应该把它当作指针。 – Bathsheba

+0

这是一个操作系统的东西,所以它不仅在C中,而且在其他语言中 –

回答

5

没有,stdin不是 “内存地址”。

它是一个I/O流中,基本上是一个操作系统的抽象级别,允许要读取的数据(或写入,在stdout的情况下)。

您需要使用适当的面向流的I/O功能,从流中读取。

当然你也可以从RAM中读取,所以最好编写你自己的函数来要求读取一个字符的函数,然后你可以使用这个函数来读取RAM或从stdin中读取。

喜欢的东西:

int my_scanf(int (*getchar_callback)(void *state), void *state, const char *fmt, ...); 

通常是合理的。 state指针是getchar_callback()函数需要的一些用户定义的状态,并由my_scanf()传递给它。

2

标准输入是一个“输入流”,这是东西一个抽象的术语,需要从用户或从文件输入。它是一个位于实际文件处理和I/O之上的抽象层。流的目的主要是为了让你的代码可以在不同的系统之间移植。

读取/写入内存更低水平,并没有任何与流本身。为了以有意义的方式使用流,您必须知道某个编译器在内部如何实现流,这可能不是公共信息。在某些情况下,就像在Windows中一样,流由操作系统本身定义,并且可以通过API调用访问。

如果您正在寻找建立自己的scanf函数,你就必须寻找到特定的API功能,适用于特定的操作系统,然后在这些之上构建自己的抽象层。