Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个文件的c代码_C_File Io_Compare - Fatal编程技术网

比较两个文件的c代码

比较两个文件的c代码,c,file-io,compare,C,File Io,Compare,我需要逐行比较两个文件。其中一个文件在行尾有一个类似^M的字符。我想在比较时排除这一点。我还需要找到匹配的行数。这是我的密码。如何添加该^M以及在何处增加行contor int compareFile(FILE* file_compared, FILE* file_checked) { bool diff = 0; int N = 65536; char* b1 = (char*) calloc (1, N+1); char* b2 = (char*) callo

我需要逐行比较两个文件。其中一个文件在行尾有一个类似^M的字符。我想在比较时排除这一点。我还需要找到匹配的行数。这是我的密码。如何添加该^M以及在何处增加行contor

int compareFile(FILE* file_compared, FILE* file_checked)
{
    bool diff = 0;
    int N = 65536;
    char* b1 = (char*) calloc (1, N+1);
    char* b2 = (char*) calloc (1, N+1);
    size_t s1, s2;

    do {
        s1 = fread(b1, 1, N, file_compared);
        s2 = fread(b2, 1, N, file_checked);

        if (s1 != s2 || memcmp(b1, b2, s1)) {
            diff = 1;
            break;
        }
      } while (!feof(file_compared) || !feof(file_checked));

    free(b1);
    free(b2);

    if (diff) return 0;
    else return 1;
}

void main(int argc, char *argv[] )
{
FILE *fpread, *fpread2;
  char filebuff[MAXLINE];
  char filebuff2[MAXLINE];
  int var = 0;
  int linecount = 0;
printf ("COMPARE RESULT %d \n",compareFile("file1","file2"));

您看到的
^M
实际上是回车字符(ASCII 13,C语法
\r
)。在比较文本文件时,最好不要在意使用的行终止模式,因为有几种模式(Unix、Windows和Mac各有自己的模式)

您可能应该将输入拆分为行,忽略使用的确切行终止,然后比较行


更新编写一个函数,每次读取一个字符,当到达任何有效的行终止序列时停止,并确保在行增长时动态分配内存。

您看到的
^M
实际上是回车符(ASCII 13,C语法
\r
)。在比较文本文件时,最好不要在意使用的行终止模式,因为有几种模式(Unix、Windows和Mac各有自己的模式)

您可能应该将输入拆分为行,忽略使用的确切行终止,然后比较行

更新编写一个函数,每次读取一个字符,当到达任何有效的行终止序列时停止,并确保在行增长时动态分配内存。

首先:

int diff = 0;
递增计数器:

if (s1 != s2 || memcmp(b1, b2, s1)) {
    ++diff;
}
最后,我要说的是:

return diff;
您的职能还应包括:

int compareFile(char* fc_name,char* fk_name){
    /* Variable Declarations */
    FILE *file_compared = fopen(fc_name,"r");
    FILE *file_checked = fopen(fk_name,"r");
    if(file_compared == NULL || file_checked == NULL)
          return -1;
    /* .... */
}
首先:

int diff = 0;
递增计数器:

if (s1 != s2 || memcmp(b1, b2, s1)) {
    ++diff;
}
最后,我要说的是:

return diff;
您的职能还应包括:

int compareFile(char* fc_name,char* fk_name){
    /* Variable Declarations */
    FILE *file_compared = fopen(fc_name,"r");
    FILE *file_checked = fopen(fk_name,"r");
    if(file_compared == NULL || file_checked == NULL)
          return -1;
    /* .... */
}

您的函数将收到您昨天在此处询问的文件名或文件*??的精确副本。您的函数将收到您昨天在此处询问的文件名或文件*??的精确副本。如何操作?你能举个例子吗?我不知道怎么解决这个问题。谢谢你怎么做?你能举个例子吗?我不知道怎么解决这个问题。非常感谢。