このコードは、結果をファイルに戻しますが、完全には正しくありません。 同様に、ラインブレーカやsthの検出に関する問題があります。ここでは例です:ファイルへの行を反転する際の問題
出典:
This is a line.
This is another line.
Quick brown fox jumps over a lazy dog!
結果:
(blank line)
.enil a si sihT
.enil rehtona si sihT!god yzal a revo spmuj xof nworb kciuQ
#include <stdio.h>
#include <string.h>
char *reverse (char *str)
{
char *begin, *end, c;
if (!str || !(*str))
return NULL;
for (begin=str, end=str+strlen(str)-1; begin<end; begin++, end--)
{
c=*begin;
*begin=*end;
*end=c;
}
begin=str+strlen(str)+1; *begin='\0'; //??
return str;
}
void main(void)
{
char line[1000];
FILE *fsrc, *frslt;
fsrc=fopen("source.txt", "r");
if (fsrc==NULL) return;
frslt=fopen("result.txt", "w");
while (!feof(fsrc))
{
fgets (line, 1000, fsrc);
fputs (reverse(line), frslt);
}
fclose(fsrc);
fclose(frslt);
}
[whileループ内FEOFが間違っている - これを読む](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong ) –
コードは正常に動作していますが、行が逆転しています。起こっているのは、改行( '\ n')も反転しているため、改行が各行の先頭に置かれていますが、「クイックブラウンキツネ...」には行がありません最後にはフィードが必要なので、2行目と3行目を一緒にスムージングするのはこのためです。 '\ n'を逆にする行の終わりとして使用しようとしています。 –
インプレースで作業しているので、これは必要ありません: 'begin = str + strlen(str)+1; * begin = '\ 0';そして、あなたはあまりにも多くを追加しています(バッファは大きければまだ問題ありません)。 –