所以我找不到這個問題的答案。fgetc不增加指針或減少fpos_t對象(C)
有兩種:
類似龜etc,在指針檢索字符,不增加指針的函數?
或者一種減少fpos_t對象而不減少指針下方的方法。 (在這個答案最感興趣)
對於C.
所以我找不到這個問題的答案。fgetc不增加指針或減少fpos_t對象(C)
有兩種:
類似龜etc,在指針檢索字符,不增加指針的函數?
或者一種減少fpos_t對象而不減少指針下方的方法。 (在這個答案最感興趣)
對於C.
你有三個選擇:
1)使用ftell/fseek
例子:
FILE * pFile;
char c1, c2;
long offset;
pFile = fopen ("example.txt" , "r");
offset = ftell(pFile);
c1 = fgetc(pFile);
fseek (pFile , offset , SEEK_SET);
c2 = fgetc(pFile);
/* result: c1 == c2 */
(備註:對於二進制流,你也可以ry使用fseek(pFile, -1, SEEK_CUR)
,但是對於文本模式,正如所注意到的,獲取一個字符可能使指針超過一個位置)。
實施例:
FILE * pFile;
fpos_t position;
char c1, c2;
pFile = fopen ("example.txt","r");
fgetpos (pFile, &position);
c1 = fgetc(pFile);
fsetpos (pFile, &position);
c2 = fgetc(pFile);
/* result: c1 == c2 */
3)使用ungetc
FILE * pFile;
char c1, c2;
c1 = fgetc(pFile);
ungetc(c1, pFile);
c2 = fgetc(pFile);
/* result: c1 == c2 */
在以下這些方法中的一種將是更有效的,是與平臺和實現相關的。例如。例如,可能是在ungetc
的引擎下,將重新讀取當前塊直到當前點。或者它可能只是將指針移動到內存緩衝區中。
對於第一個例子,你想要使用'ftell'來確定'fgetc'之前的當前位置,然後反饋給'fseek'。從文本流中讀取單個字符可能會超過1個字節(例如,從一個字符中讀取換行符Windows文本文件返回''\ n'',但消耗''\ r''和''\ n'')。當然,它只在文件可搜索時才起作用;例如,不能倒退'stdin' – 2014-10-08 01:02:46
確實會更新答案 – Ashalynd 2014-10-08 01:04:27
請注意''ungetc()'有一些與文件定位函數相關的有趣屬性,仔細閱讀它的規範。 – 2014-10-08 01:13:31
這樣的事情? http://stackoverflow.com/a/2082772/535275 – 2014-10-08 00:47:38
你指的是什麼''fpos_t'對象,什麼是「它下面的指針」,它們是如何區分的? – 2014-10-08 01:01:36