小小的 copy 大大的學問

平常都是直接在電腦上寫程式,結果面試的時候要在紙上寫,還真的寫不太出來。因為都習慣線上查資料,所以參數都沒有背,所以拿回家 compiler 後果然一堆錯誤,不是參數位置放錯,不然就是個數不正確。

以下是修改過的版本,錯誤檢查是一定要的,比較特別的是 fread 跟 fwrite 的第 2 & 3 個參數,其中第 2 個參數是 size,第 3 個參數是個數,而傳回值是成功讀取或寫入的個數而非 size。我原本的寫法是

length = fread(buf, sizeof(buf),1, fp)

成功時 length = 1,但最後一筆不滿 buf size 的就讀不到了,所以才改成

length = fread(buf, 1, sizeof(buf), fp)

這樣 length 就傳回實際讀到的長度了,不過不曉得有沒有影響效能就是了


#include <stdio.h>

#include <stdlib.h>



int main(int argc, char *argv[])

{
    if (argc != 3)
    {
        printf("Usage:\n");
        printf("    my_copy [source file] [dest file]\n");
        return 0;
    }

    FILE *fp;
    fp = fopen(argv[1], "r");
    if (!fp)
    {
        printf("%s file open error.\n", argv[1]);
        return 0;
    }

    FILE *fpw = fopen(argv[2], "w");
    if (!fpw)
    {
        printf("%s file open error.\n", argv[2]);
        fclose(fp);
        return 0;
    }

    char buf[1024];
    int length;

    while ((length = fread(buf, 1, sizeof(buf), fp)) != 0)
    {
        fwrite(buf, 1, length, fpw);
    }

    fclose(fp);
    fclose(fpw);


    return 0;

}

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯