2012-07-07 70 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