1. 程式人生 > >【C語言】C語言實現檔案內容的複製

【C語言】C語言實現檔案內容的複製

需求: fgetc   fputc練習

/program檔案下面存在一個檔案 檔名為:addoverflowDemo.c 現在需要在該目錄下複製一個相同的檔案,檔名為test:

程式碼如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{

FILE * sourcefile;
FILE * desfile;
char c;
sourcefile = fopen("/program/addoverflowDemo.c","r");
desfile = fopen("/program/test","w");
while((c = fgetc(sourcefile)) != EOF)
{
        fputc(fgetc(sourcefile),desfile);
}

fclose(sourcefile);
fclose(desfile);

return EXIT_SUCCESS;
}


編譯執行,結果如下:

[[email protected] program]# cat test
icue<ti.>#nld sdi.>
n an){ca u;itoeao1=47;/47  0101| 0011 eaeia 30 sm=oeao1
/iuto  u  0101;cttehge is1
/iuto  u  0011;cttelwrbt:Apit(sm=%\"sm;

這是嗎?完全和預想的不一樣,什麼原因呢?

仔細分析程式執行結果:輸出的時候好像都是隔了一個字元,

於是回過頭去看原始碼

while((c = fgetc(sourcefile)) != EOF)
{
        fputc(fgetc(sourcefile),desfile);
}
可能是這裡 fgetc每次都運行了兩次,使得檔案指標,每次都多移動了一位。

修改程式碼如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{

FILE * sourcefile;
FILE * desfile;
char c;
sourcefile = fopen("/program/addoverflowDemo.c","r");
desfile = fopen("/program/test","w");
while((c = fgetc(sourcefile)) != EOF)
{
        fputc(c,desfile);
}

fclose(sourcefile);
fclose(desfile);

return EXIT_SUCCESS;
}

這是就OK了。

這時我注意到了,在我第二次向檔案test中輸出的時候,test檔案裡面的原有值,那麼,如何追加呢?

答:許可權部分使用引數“a+”,即開啟test檔案的時候,將開啟的許可權設為 “a+”

desfile = fopen("/program/test","a+");


OK!

敲定。

相關推薦

RHEL 7Samba服務實現檔案共享

1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,伺服器訊息塊)協議,旨在解決區域網內的檔案或印表機等資源的共享問題,這也使得在多個主機之間共享檔案變得越來越簡單。到了1991年,當時還在讀大學的Tridgwell為了解決Linux系統與Windo

C語言C語言實現檔案內容複製

需求: fgetc   fputc練習 /program檔案下面存在一個檔案 檔名為:addoverflowDemo.c 現在需要在該目錄下複製一個相同的檔案,檔名為test: 程式碼如下: #include <stdio.h> #include <std

C語言編寫函式實現庫函式atoi,把字串轉換成整形

//編寫函式實現庫函式atoi,把字串轉換成整形 #include <stdio.h> #include <string.h> int my_atoi(const char *

c語言遞迴實現n的k次方

問題描述: 如題。 分析: 1.n的k次=n*n*n*……*n(k個n),用遞迴的思想來講,就等於2.n的k次=n*(n的(k-1)次方) 程式碼如下: #include<stdi

C語言編寫函式實現:100-200素數的輸出

    這裡面,先要理解素數如何求得,可用自己除以2到自己的前一位,根據餘數情況判斷是素數還是合數。優化:(1)從101開始,每次自加2,這樣提高效率一倍。(2)一直除以自己的平方根也可。#include<stdio.h> #include<math.h&g

c語言C語言配置檔案解析庫——iniparser

C語言配置檔案解析庫——iniparser 前言:在對專案的優化時,發現Linux下沒有專門的供給C語言使用的配置檔案函式,於是搜尋到了inipar

資料結構C語言最基礎練習:棧的初始化,壓棧,出棧,遍歷,清空

隨手練習一下,詳細程式碼解釋都在程式碼片裡請仔細看看 如果有什麼不對的地方,請在下方留言 先建立標頭檔案: #define _CRT_SECURE_NO_WARNINGS 1 #ifndef _TEST_H #define _TEST_H //棧的鏈式儲存結構;

學習總結C語言的const到底修飾誰

不足之處還請指正。 const修飾的誰? 要在程式設計中多正確的使用const來使程式變得更加健壯。 《高質量C++/C程式設計指南》 const是修飾誰? #include <stdio.h

入門指導C語言難嗎?最難啃的三塊硬骨頭

先來看一個網友的對話: C語言說難也不難,開始接觸就是學習基礎,資料型別,函式格式,指標等等。越學越深入,越學視野越寬闊,只要認真看書,聽講,下來多練習,不難。 記憶體佈局 指標公認最難理解的概念,也是讓很多初學者選擇放棄的直接原因 指標之所以難理解,因為指標本身就是一個變數

易錯C語言結構體記憶體對齊問題

對於一個結構體的位元組數大家有沒有遇到什麼疑問呢? 先看一個結構體: typedef struct Test { char a1; int a2; char a3; short a4; }Test_T; 在32位編譯系統下這一個結構體的位元組數是多少呢?是1+4

C語言(遞迴遍歷資料夾)實現檔案批量複製

大專案時時常需要抽出屬於自己編寫的那部分程式碼,從SVN下載後,往往需要一個個的進入資料夾下拿取相應的檔案。這樣很浪費時間,雖然使用bat編寫確實更快,但是我覺得使用C語言可能在檔案過多時會快一點,也是為了 練習練習。如果那裡存在問題,或是不足,歡迎指出。程式碼如下: #includ

程式語言C# 從菜鳥到高手

1 Overview 1.1 CLI common language infrastructure The .NET Framework, .NET Core, Mono, DotGNU and Portable.NET are implementations

c語言C語言楊輝三角

楊輝三角是我們從初中就知道的,現在,讓我們用C語言將它在計算機上顯示出來。 在初中,我們就知道,楊輝三角的兩個腰邊的數都是 1,其它位置的數都是上頂上兩個數之和。這就是我們用C語言寫楊輝三角的關鍵之一。 在高中的時候我們又知道,楊輝三角的任意一行都是的二項式係數,n 為行數減 1。也就是

程式語言C++繼承和派生類、虛基類

從已有的物件型別出發建立一種新的物件型別,使它部分或全部繼承原物件的特點和功能,這是面向物件設計方法中的基本特性之一。繼承不僅簡化了程式設計方法,顯著提高了軟體的重用性,而且還使得軟體更加容易維護。派生則是繼承的直接產物,它通過繼承已有的一個或多個類來產生一個新的類,通過派生

C/C++筆記 C語言運算子優先順序

文章作者:姜南(Slyar) 文章來源:Slyar Home (www.slyar.com) 轉載請註明,謝謝合作。單目運算子優先順序運算子名稱或含義使用形式結合方向說明1[]陣列下標陣列名[常量表達式]左到右()圓括號(表示式)/函式名(形參表).成員選擇(物件)物件.成員

掃盲點——C語言enum列舉型別、union共用體

一、列舉型別  enum: 在實際應用中,有的變數只有幾種可能取值。如人的性別只有兩種可能取值,星期只有七種可能取值。在 C 語言中對這樣取值比較特殊的變數可以定義為列舉型別。所謂列舉是指將變

C語言C語言的const與C++的const區別

C++中,const預設使用內部連線.而C中使用外部連線.內連線:編譯器只對正被編譯的檔案建立儲存空間,別的檔案可以使用相同的表示符或全域性變數.C/C++中內連線使用static關鍵字指定.外連線:所有被編譯過的檔案建立一片單獨儲存空間.一旦空間被建立,聯結器必須解決對這片儲存空間的引用.全域性變數和函式使

C語言C語言中格式化字元的具體用法(C語言中%的那些事)

格式字元格式字元用以指定輸出項的資料型別和輸出格式。   格式字元控制: 說明:的sprintf(格式化後的字元,“%(長度)格式符”,格式化前的字元); 1,d格式符用來輸出十進位制數有以下幾種用法。: (1),%d按整數的實際長度輸出。 (2),%M

利用C語言中的函式實現檔案的Copy

2.讀寫   (1).按字元進行讀寫操作   fgetc        int fgetc(FILE *stream);        引數:           @stream 流指標      

作業系統01C語言利用CerateProcess建立程序

一個環境塊存在於一個由以NULL結尾的字串組成的塊中,這個塊也是以NULL結尾的。每個字串都是name=value的形式。因為相等標誌被當做分隔符,所以它不能被環境變數當做變數名。與其使用應用程式提供的環境塊,不如直接把這個引數設為空,系統驅動器上的當前目錄資訊不會被自動傳遞給新建立的程序。對於這個情況的探