1

生の I/O 関数を使用してファイルから読み取り、データを別のファイルに出力しようとしていますが、コードが機能しないようで、read() を終了できないことがわかりました。ただし、この場合のループを終了する方法がわかりません。私のコードは次のようになります。

int main(){
   int infile; //input file
   int outfile; //output file

   infile = open("1.txt", O_RDONLY, S_IRUSR);
   if(infile == -1){
      return 1; //error
   }
   outfile = open("2.txt", O_CREAT | ORDWR, S_IRUSR | S_IWUSR);
   if(outfile == -1){
      return 1; //error
   }

   int intch; //character raed from input file
   unsigned char ch; //char to a byte

   while(intch != EOF){ //it seems that the loop cannot terminate, my opinion
      read(infile, &intch, sizeof(unsigned char));
      ch = (unsigned char) intch; //Convert
      write(outfile, &ch, sizeof(unsigned char));
  }
   close(infile);
   close(outfile);

   return 0; //success
}

誰かが問題について私を助けてくれますか? 本当にありがとうございました

4

2 に答える 2

1

read0ファイルの終わりに遭遇した場合、次のように返されます。

while(read(infile, &intch, sizeof(unsigned char) > 0){ 
    ch = (unsigned char) intch; //Convert
    write(outfile, &ch, sizeof(unsigned char));
}

負の値はエラーを示すため、 の戻り値を保存することをお勧めしますread

于 2013-02-18T00:04:13.077 に答える
0

intch は初期化されていない 4 (場合によっては 8) バイトです。intch に 1 バイトだけをロードし、残りのバイトは初期化されていません。次に、EOF を、完全に初期化されていないすべての inch と比較します。

intch を char として宣言してみてください。

于 2013-02-18T00:09:00.637 に答える