私は入力ファイルの内容を逆にして出力ファイルに書き込むために、Cで小さなプログラムを書いています。その "テキストの終わり"を取り除く方法
#include <stdio.h>
#include <stdlib.h>
#define BS 12
int main (const int argc, const char** argv)
{
if(argc != 3)
exit(-1);
unsigned char buffer[BS];
FILE * f1, * f2;
f1 = fopen(argv[1], "r");
f2 = fopen(argv[2], "w");
fseek(f1, 0, SEEK_END);
long i = 0, j = 0;
long f1_len = ftell(f1);
unsigned char tmp;
// while(i >= 0)
// {
for(i = ftell(f1), j = 0; i >= 0 && j <= BS - 1; i--, j++)
{
fseek(f1, i, SEEK_SET);
tmp = fgetc(f1);
if(i == f1_len || tmp == (unsigned char)0x03)
continue;
else
buffer[j] = tmp;
}
if(j == BS - 1)
fwrite(buffer, BS, 1, f2);
else
fwrite(buffer, j, 1, f2);
fflush(f2);
// }
fclose(f1);
fclose(f2);
return 0;
}
テストファイル:
$ xxd testfile
0000000: 6162 6364 6566 670a abcdefg.
テスト:
$ gcc test.c -o test
$ test testfile testfile2
$ xxd testfile2
0000000: 030a 6766 6564 6362 61 ..gfedcba
なぜ '0×03' はありますか?私はすでにその文字を取り除くためにtmp == (unsigned char)0x03
を書きましたか?