C 传递参数2,3使指针从整数变为不带强制转换的整数

C 传递参数2,3使指针从整数变为不带强制转换的整数,c,pointers,casting,C,Pointers,Casting,使用C语言和Netbeans 8.0.2,我试图读取两个文件中的一组字符,并将这些字符传递给名为Patmat的方法,该方法用于比较它们 Patmat方法有三个参数。int参数是可能存在的不匹配数,其他两个字符的参数是文件内容 下面是我从一篇文章中得到的Patmat方法,其中有一个很长的比较过程 int Patmat(int k, char *pattern, char *text){ } 这是我的主要方法 int main() { FILE *fp1; FILE *fp2

使用C语言和Netbeans 8.0.2,我试图读取两个文件中的一组字符,并将这些字符传递给名为Patmat的方法,该方法用于比较它们

Patmat方法有三个参数。int参数是可能存在的不匹配数,其他两个字符的参数是文件内容

下面是我从一篇文章中得到的Patmat方法,其中有一个很长的比较过程

int Patmat(int k, char *pattern, char *text){
}
这是我的主要方法

int main() {   
    FILE *fp1;
    FILE *fp2;

    char c;
    char c2;

    fp1= fopen ("file1.txt","r");
    fp2= fopen("file2.txt","r");

    while(1)
    {
        c = fgetc(fp1);
        if(c==EOF)
            break;
        else
            printf("%c", c); 
    }

    while(1)
    {
        c2 = fgetc(fp2);
        if(c2==EOF)
            break;
        else
            printf("%c", c2); 
    }
    fclose(fp1);
    fclose(fp2); 
    **// Patmat(0,&c,&c2);
    Patmat(0,c,c2);**
    return 0;   
}
由于我对C和指针不太熟悉,有人能帮我将两个文件的字符集传递给Patmat方法吗?它不能像上面那样工作

两个文件的内容是:

file1.txt: AGGTACCGTA
file2.txt: AGGTACCGTA
我直接将这些参数传递为
Patmat(0,“aggtacgta”,“aggtacgta”)
。它工作正常,返回的答案为1,这是正确的

但是现在我想从文件中读取这些字符集,并将它们传递给Patmat方法。它给出了以下警告:

warning: passing argument 3 of 'Patmat' makes pointer from integer without a cast
 warning: passing argument 2 of 'Patmat' makes pointer from integer without a cast
提前谢谢,如果给您带来不便,请原谅。这是我第一次尝试在这里发帖

while(1)
    {
        c = fgetc(fp1);
        if(c==EOF)
            break;
        else
            printf("%c", c); 
    } // By the time this loop breaks c will be EOF

    while(1)
    {
        c2 = fgetc(fp2);
        if(c2==EOF)
            break;
        else
            printf("%c", c2); 
    } // similar applies to this loop c2 EOF
    fclose(fp1);
    fclose(fp2); 
    **// Patmat(0,&c,&c2);
    Patmat(0,c,c2);// This section is not probably well equipped to provide correct results,  becuase of the EOF 
我怀疑你要找的是这样的东西

while( ((c = fgetc(fp1)) != EOF ) &&
       ((c2= fgetc(fp2)) != EOF ) ) {
               printf("%c %c", c, c2); 
               Patmat(0,&c,&c2); 
}

当您中断此循环时,要么两个文件都已完全读取,要么其中一个文件仍不在EOF,这些情况需要在此处处理。

如果您要读取整个文件,则字符(一个字符)不是您想要的。在这种情况下,您希望将文件的内容读取到数组中

char *buffer[1024]; // for example
int result = fread(buffer, 1, 1024, fp1);
现在,缓冲区包含可以传递给Patmat函数的文件内容

Patmat(0, buffer, buffer2); // buffer2 goes the same way
如果要一次性读取整个文件(对于较小的文件很有用),还可以动态分配
缓冲区。还要确保设置空终止符


更新:例如:

#include <stdio.h>
#include <stdlib.h>

#define BUFSZ 32

void patmat(int k, char *pattern, char *text) {
    /* Compare or do something here */
    printf("K %d\nPattern %s\nText %s\n", k, pattern, text);
}

int main(int argc, char *agrv[]) {
    FILE *fp1 = NULL;
    FILE *fp2 = NULL;

    char buffer[BUFSZ];
    char buffer2[BUFSZ];

    if (!(fp1 = fopen("file1.txt","r"))) {
        perror("open file");
        return 1;
    }
    if (!(fp2 = fopen("file2.txt","r"))) {
        perror("open file");
        return 1;
    }

    size_t result = fread(buffer, 1, BUFSZ, fp1);
    if (!result)
        puts("reading error");

    size_t result2 = fread(buffer2, 1, BUFSZ, fp2);
    if (!result)
        puts("reading error");

    buffer[result-1] = '\0';
    buffer2[result2-1] = '\0';

    patmat(0, buffer, buffer2);

    fclose(fp1);
    fclose(fp2);
    return 0;
}
#包括
#包括
#定义BUFSZ 32
void patmat(int k,char*模式,char*文本){
/*在这里比较或做点什么*/
printf(“K%d\n模式%s\n文本%s\n”,K,模式,文本);
}
int main(int argc,char*agrv[]{
文件*fp1=NULL;
文件*fp2=NULL;
字符缓冲区[BUFSZ];
字符缓冲区2[BUFSZ];
如果(!(fp1=fopen(“file1.txt”,“r”)){
perror(“打开文件”);
返回1;
}
如果(!(fp2=fopen(“file2.txt”,“r”)){
perror(“打开文件”);
返回1;
}
大小结果=fread(缓冲区,1,BUFSZ,fp1);
如果(!结果)
puts(“读取错误”);
大小结果2=fread(缓冲区2,1,BUFSZ,fp2);
如果(!结果)
puts(“读取错误”);
缓冲区[结果-1]='\0';
buffer2[result2-1]='\0';
patmat(0,缓冲器,缓冲器2);
fclose(fp1);
fclose(fp2);
返回0;
}

这只是一个示例,还有其他/更好的方法。

在执行
-循环时,您希望这两个
做什么?在调试器中运行代码,并逐行跟踪检查相关变量。关于如何执行此操作,阅读此内容可能会让您开始。
c
c2
不是字符集,它们是单个字符。谢谢,但我要说的是,file1.txt中的所有字符都以c='aggtacgta'的形式分配给变量c,file2.txt中的字符以c2='aggtacgta'的形式分配给变量c2。这就是为什么我把它们称为角色集。对不起,我做错了。它很好地打印了c和c2,但我无法将它们传递给该方法。是否可以使用Patmat(0,&c,&c2)并签名。但它没有起作用。感谢you@asw:一个
char
变量是一个单字节,它只能包含一个字符。这将非常有用。谢谢我可以给你一个完整的例子,如果这有帮助的话。是的,谢谢,因为接下来我应该开发我的程序来比较更大的文件。