私は2つのテキストファイルを比較し、それらが異なる最初の行を印刷しようとしていますが、fgets()コマンドで500のバッファを使用しています。 行の長さが分からない場合、どうすれば同じプログラムを作成できますか?ここでcで2つのtxtファイルを比較する
は私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
FILE *fp1, *fp2;
int nLine = 1;
char l1[500], l2[500];
system("clear");
if (argc < 3)
{
printf("Usage: %s <file1.txt> <file2.txt>\n",argv[0]);
exit(1);
}
if ((fp1 = fopen(argv[1],"r")) == NULL){
printf("Can't open file: %s\n", argv[1]);
exit(1);
}
if ((fp2 = fopen(argv[2],"r")) == NULL){
printf("Can't open file: %s\n", argv[2]);
exit(1);
}
fgets(l1,500,fp1);
fgets(l2,500,fp2);
while ((l1 != 0) && (l2 != 0)){
if(strcmp(l1,l2) != 0){
printf("Line number: %d\n", nLine);
printf("%s", l1);
printf("%s\n", l2);
exit(1);
} else {
fgets(l1,500,fp1);
fgets(l2,500,fp2);
nLine++;
}
}
return 0;
}
ファイルがない場合あなたは無限ループを持っています。 'fgets()'の戻り値を確認してください。 – chux
charが異なっていれば、両方のファイルの文字を比較し、行を印刷する関数を呼び出すことができます。私たちがこのラインに従っていないので、これは難しいことがあります。改行文字を取得するまで、逆方向にトラバースすることができます。その行を印刷します。 –
目的を達成するためにバッファーは必要ありません。私は、即座にコレスポンデントのキャラクタを比較し、プロセスで直面した最新の改行文字を覚えています。 – mw215