c - 比较c linux fgets中的2个文件
问题描述
我需要比较 2 个文件,如果它们相同则返回 1,否则返回 0,但函数总是返回 0。我不知道为什么。也许你知道可以做到这一点的不同功能。
int compare(char *file_1, char *file_2)
{
FILE *data_1 = fopen(file_1,"r");
FILE *data_2 = fopen(file_2,"r");
char line1[1000];
char line2[1000];
while(fgets(line1, sizeof(line1), data_1)&&fgets(line2, sizeof(line2), data_2)){
if(strcmp(line1,line2)==0){
fclose(data_1);
fclose(data_2);
return 0;
}
}
fclose(data_1);
fclose(data_2);
return 1;
}
解决方案
strcmp(line1,line2)==0
表示line1和line2相等,您的代码假设它们不同
还有一个错误,如果一个文件以另一个文件的内容开头,你认为文件是相等的(假设你更正了strcmp)
我鼓励您检查fopen的结果,以防其中至少一个不存在/无法打开
解决方案可以是:
int compare(char *file_1, char *file_2)
{
FILE *fp1 = fopen(file_1,"r");
if (fp1 == 0)
return 0;
FILE *fp2 = fopen(file_2,"r");
if (fp2 == 0) {
fclose(fp1);
return 0;
}
char line1[1000];
char line2[1000];
char * r1, * r2;
int result;
for (;;) {
r1 = fgets(line1, sizeof(line1), fp1);
r2 = fgets(line2, sizeof(line2), fp2);
if ((r1 == 0) || (r2 == 0)) {
result = (r1 == r2);
break;
}
if (strcmp(line1,line2) != 0) {
result = 0;
break;
}
}
fclose(fp1);
fclose(fp2);
return result;
}
推荐阅读
- c# - 在 ASP.NET MVC 中使用 ajax 将数据从视图传递到控制器
- docker - 詹金斯“Docker 构建和发布”插件不起作用
- java - 在 VSCode 的 Microsoft Debugger for Java 扩展中,是否可以让它知道 Lombok?
- angular - 有条件地在 Angular Http 拦截器中设置标题
- database - 对多个索引的 Elasticsearch 查询非常慢
- c# - 覆盖使用 Polly 定义的 HttpClientFactory 策略
- javascript - createObjectURL:使用 Blob 时在 Safari 中键入错误
- javascript - 如何在函数调用中从数组中一一返回值?
- python - Python matplotlib 的 FuncAnimation 无法通过内部 Latex 渲染和 PyCharm 正确关闭?
- javascript - 基于 if 语句获取