检查两个文件是否相同

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".
我通过在每次迭代中打印 singleLinesecondLine 来检查,它们是相同的。

我做错了什么?

以下内容并不像您认为的那样有效:

if (singleLine !=  secondLine)

那是因为 singleLinesecondLine 是数组(被视为字符串)。 Equality/inequality C 中的运算符,当用于数组时,只需检查两个数组是否驻留在内存中的相同地址(即是相同的变量)。在你的情况下不是,所以你的 if 语句总是正确的。

由于您将两个数组都视为字符串,因此正确使用的函数是 strcmpstrncmp,它们都在 <string.h> 中定义。这是在 C 语言中执行字符串比较的标准方法(因此函数的名称)。

你的 if 语句,在这种情况下应该是:

if (strcmp(singleLine, secondLine) != 0)
{
    status = 1;
}