2012-07-07 117 views
2

當我讀入一個文件,然後輸出到一個新文件時,輸出是亂碼,我試圖找出原因。爲什麼我的文件輸出出現亂碼?

我試圖運行下面的代碼

#include<stdio.h> 
#include<stdlib.h> 
int main(int argc ,char *argv[]) 
{ 
    int c; 
    FILE *of; 
    FILE *f; 
    of=fopen(argv[2],"w"); 
    f=fopen(argv[1],"r"); 
    while(c=getc(f)!=EOF) 
     putc(c,of); 
    fclose(of); 
    fclose(f); 
    return 0; 

} 

但是當我運行它,如下所示 $./a.out temp new

其中temp是一個已經存在的文件,其內容是: this is a temp filenew不存在在運行程序之前

但是現在當我捕捉到new的內容時,它全部搞砸了它是如此嗎?

+0

是否使用了'''od'''或不同hexdump都-style命令用來發現,每一個字節是按Ctrl-A, ASCII 1? – 2012-07-07 19:14:49

+1

除了Daniel Fischer的回答,考慮將'main'修改爲'int main',使用'fclose'關閉並添加'return 0'以從主返回成功。 – 2012-07-07 19:17:16

+0

還有一個問題出現我看到文件的八進制轉儲新但所有字節不是1倒數第二個字節爲0爲什麼這樣呢? – bhaskar 2012-07-07 19:23:03

回答

12
while(c=getc(f)!=EOF) 

需要括號,

while((c=getc(f)) != EOF) 

!=的優先級比分配=高。

-1

我不知道如果我正確與否,但你不認爲C應該是一個焦炭,而不是一個INT

+0

如果它是'char',那麼所有可能的值都是有效的。你如何測試'EOF'? – 2012-07-07 19:12:52

+0

'\ 0',不會工作嗎? – Sakki 2012-07-07 19:14:07

+0

Sakki,不,'EOF'是一個負整數(通常是-1)。 – 2012-07-07 19:16:56

0
while(c=getc(f)!=EOF) 
     putc(c,of); 

讓我們看看你的代碼在while循環中做了什麼;在控衛,你寫

c=getc(f) !=EOF 

!=的優先級比=高,所以真正的情況是

c=(getc(f) !=EOF) 

,這意味着你在of寫1的序列,即getc(f) != EOF,直到找到EOF。

你的意思寫的,前面已經說了,可能是

(c = getch(f)) != EOF