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

wheretemp是一个现有文件,其内容是: this is a temp file并且new在运行程序之前不存在

但是现在当我 cat 时,new它的内容都搞砸了,为什么会这样?

4

3 回答 3

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

需要括号,

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

的优先级!=高于 assignment的优先级=

于 2012-07-07T19:08:39.390 回答
0
    while(c=getc(f)!=EOF)
        putc(c,of);

让我们看看你的代码在 while 循环中做了什么;在警卫中,您写道

c=getc(f) !=EOF

的优先级!=高于=,所以真正发生的是

c=(getc(f) !=EOF)

,这意味着您正在以of1 的序列写入,即getc(f) != EOF,直到找到 EOF。

如前所述,您要写的内容可能是

(c = getch(f)) != EOF
于 2012-07-07T20:05:15.673 回答
-1

我不确定我是否正确,但您不认为 c 应该是char而不是int吗?

于 2012-07-07T19:11:00.270 回答