检查两个文件是否相同
Check if two files are the same
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
int main()
{
int status = 0;
FILE * fPointer;
FILE * gPointer;
fPointer = fopen("file1.txt", "r");
gPointer = fopen("file2.txt", "r");
char singleLine[150];
char secondLine[150];
while(fgets(singleLine,150,fPointer)!=NULL && fgets(secondLine,150,gPoi$
{
//fgets(singleLine,150,fPointer);
//fgets(secondLine,150,gPointer);
printf("singleLine: %s\n",singleLine);
printf("secondLine: %s\n",secondLine);
if (singleLine != secondLine)
{
status = 1;
}
}
printf("final status: %d\n", status);
if (status == 0)
{
printf("same\n");
}
else if (status == 1)
{
printf("not same\n");
}
fclose(fPointer);
fclose(gPointer);
return 0;
}
两个文件的内容分别是"hello"和"hello"。但出于某种原因,我得到的输出是
singleLine: hello
secondLine: hello
final status: 1
等于"not the same".
我通过在每次迭代中打印 singleLine
和 secondLine
来检查,它们是相同的。
我做错了什么?
以下内容并不像您认为的那样有效:
if (singleLine != secondLine)
那是因为 singleLine
和 secondLine
是数组(被视为字符串)。 Equality/inequality C 中的运算符,当用于数组时,只需检查两个数组是否驻留在内存中的相同地址(即是相同的变量)。在你的情况下不是,所以你的 if 语句总是正确的。
由于您将两个数组都视为字符串,因此正确使用的函数是 strcmp
或 strncmp
,它们都在 <string.h>
中定义。这是在 C 语言中执行字符串比较的标准方法(因此函数的名称)。
你的 if 语句,在这种情况下应该是:
if (strcmp(singleLine, secondLine) != 0)
{
status = 1;
}
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
int main()
{
int status = 0;
FILE * fPointer;
FILE * gPointer;
fPointer = fopen("file1.txt", "r");
gPointer = fopen("file2.txt", "r");
char singleLine[150];
char secondLine[150];
while(fgets(singleLine,150,fPointer)!=NULL && fgets(secondLine,150,gPoi$
{
//fgets(singleLine,150,fPointer);
//fgets(secondLine,150,gPointer);
printf("singleLine: %s\n",singleLine);
printf("secondLine: %s\n",secondLine);
if (singleLine != secondLine)
{
status = 1;
}
}
printf("final status: %d\n", status);
if (status == 0)
{
printf("same\n");
}
else if (status == 1)
{
printf("not same\n");
}
fclose(fPointer);
fclose(gPointer);
return 0;
}
两个文件的内容分别是"hello"和"hello"。但出于某种原因,我得到的输出是
singleLine: hello
secondLine: hello
final status: 1
等于"not the same".
我通过在每次迭代中打印 singleLine
和 secondLine
来检查,它们是相同的。
我做错了什么?
以下内容并不像您认为的那样有效:
if (singleLine != secondLine)
那是因为 singleLine
和 secondLine
是数组(被视为字符串)。 Equality/inequality C 中的运算符,当用于数组时,只需检查两个数组是否驻留在内存中的相同地址(即是相同的变量)。在你的情况下不是,所以你的 if 语句总是正确的。
由于您将两个数组都视为字符串,因此正确使用的函数是 strcmp
或 strncmp
,它们都在 <string.h>
中定义。这是在 C 语言中执行字符串比较的标准方法(因此函数的名称)。
你的 if 语句,在这种情况下应该是:
if (strcmp(singleLine, secondLine) != 0)
{
status = 1;
}