幫助使用Malloc/freads/fwrites?第一個字母不是複製過來的?爲什麼我的fread fwrite程序不在C中複製第一個字符?
while((c = getc(in))!=EOF){
fread(point, length, 1, in);
fwrite(point, length, 1, final);
}
幫助使用Malloc/freads/fwrites?第一個字母不是複製過來的?爲什麼我的fread fwrite程序不在C中複製第一個字符?
while((c = getc(in))!=EOF){
fread(point, length, 1, in);
fwrite(point, length, 1, final);
}
getc
將字符讀入c
。所以第一個字符將被存儲到c
中,而下一個將會是第二個字符。
然後fread
將一串字符(其中的count
)讀入到由ptr
指向的內存中。所以第二,第三,...,第+ 1個字符將被存儲到該存儲器中。
然後fwrite
寫他們(當然)。
(那麼你的程序重複這個直到它到達文件的末尾)
假設從文件輸出到文件的輸入正常工作,這裏有一些問題,你提供的代碼塊:
您聲明ptr
爲(int*)malloc(count)
。問題是,ptr
在這裏被視爲一個整數數組,這意味着每個元素的大小都是4字節而不是1,所以count
必須是4的倍數。如果要使用ptr
來存儲char符號,請將其更改到ptr = (char*)malloc(count)
或ptr = (int*) malloc(sizeof(int) * count)
如果你的'符號'實際上是4字節整數;
您將字符讀入變量c
,但您沒有使用它。
根據this description
,fread
和fwrite
的第二個參數是元素的大小,第三個參數是要讀取/寫入的元素的數量。
如果你想要做fread
到文件結束,就沒有必要做while ((c=getc(in)) != EOF)...
,只要按照this stackoverflow post
希望這有助於。
注意:最好不要'fwrite(point ...)'而不先檢查fread的結果(point ...' – chux