Trending News
C語言;rewind()和開檔問題
當我打
FILE *intest;
FILE *outtest;
int c;
intest=fopen("test.dat","rb");
outtest=fopen("test2.dat","wb");
while((c=fgetc(intest))!=EOF){
fputc(c,outtest);
rewind(outtest); <--------我原先想法是回到outtest指標的開頭然後再輸入,認為可以達到reverse的效果,但是為什麼test2.dat會變成空的呢??
}
program 阿邦 你指的是fopen()的用法媽?還是其他的??
如果是fopen的話我是用2元的方式存檔,所以用rb和wb
不是的話請告訴我是哪一個錯了~謝謝
~感謝回覆
請問東邪無弓大大:
fseek(outtest, ftell(intest) -1 , SEEK_SET);
ftell(intest)為什麼要-1呢??
SEEK_END是將指標移到最後一個資料的地方還是資料後面(不含資料)??
感謝東邪無弓大大
我懂了.......也感謝slash大大
3 Answers
- 1 decade agoFavorite Answer
#include
main()
{
FILE *intest;
FILE *outtest;
int c;
intest = fopen("test.dat", "rb");
outtest = fopen("test2.dat", "wb");
fseek(intest, 0L, SEEK_END);
fseek(outtest, ftell(intest), SEEK_SET);
rewind(intest);
while ((c = fgetc(intest)) != EOF)
{
fputc(c, outtest);
fseek(outtest, -2L, SEEK_CUR);
}
fclose(intest);
fclose(outtest);
}
2008-06-03 00:19:57 補充:
To 東邪無弓,
寫太快了, 沒注意到.
對, 這樣會導致檔案開頭多一個未知 byte.
謝謝.
Source(s): 我的頭腦 - 東邪無弓Lv 71 decade ago
TO slash大:
fseek(outtest, ftell(intest) -1 , SEEK_SET);
這樣才不會偏移 1 Byte。
2008-06-02 20:49:43 補充:
TO 提問者:
fseek(intest, 0L, SEEK_END);
ftell(intest) 傳回的將是該檔的長度(BYTES),但別忘了,檔案指標由 0 開始,所以檔案最後一個字元的指標要將該傳回值減 1 。(0~N-1)
你可以實作驗證看看。
2008-06-02 21:14:24 補充:
易言之,
fseek(intest, 0L, SEEK_END);
會把讀寫指標指向EOF的位置。(最後字元的次一位置)