2016-06-09 37 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功能,適用於特定的操作系統,然後在這些之上構建自己的抽象層。