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めちゃくちゃになってしまうのはなぜですか?

4

3 に答える 3

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

かっこが必要です、

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

の優先順位は!=、割り当ての優先順位よりも高くなり=ます。

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

コードがwhileループで何をするか見てみましょう。警備員に、あなたは書いた

c=getc(f) !=EOF

の優先順位!=はより高いので=、実際に起こっていることは

c=(getc(f) !=EOF)

、つまり、EOFが見つかるまで、of1のシーケンスで書き込んでいることを意味します。getc(f) != EOF

すでに言ったように、あなたが書くつもりだったのはおそらく

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

私が正しいかどうかはわかりませんが、cはintではなくcharである必要があると思いませんか?

于 2012-07-07T19:11:00.270 に答える