C 从文件中查找子字符串索引的程序

C 从文件中查找子字符串索引的程序,c,string,file-handling,C,String,File Handling,在将子字符串复制到数组中后,我试图查找文件中存在子字符串的索引 我怀疑这里面有匹配的地址。如果是,还有什么其他选择 #include<stdio.h> #include<string.h> int main(int argc, char **argv) { FILE *fp = fopen(argv[1], "r"); int len, i=0, c=0; fseek(

在将子字符串复制到数组中后,我试图查找文件中存在子字符串的索引

我怀疑这里面有匹配的地址。如果是,还有什么其他选择

    #include<stdio.h>
    #include<string.h>
    int main(int argc, char **argv)
    {
            FILE *fp = fopen(argv[1], "r");
            int len, i=0, c=0;
            fseek(fp, 0, SEEK_END);
            len = ftell(fp);                                //number of characters in file
            rewind(fp);
            char ch, arr[len], *p, *q; 
            while((ch = fgetc(fp)) != EOF )                 //copy file into arr[len]
            {
                    arr[i] = ch; 
                    i++;
            }
            rewind(fp);
            char a[200];

            while((fgets(a, 200, fp)))              //a contains line from fp
            {
            q=a;                                    //q pointing at base address of a
                    if((p = strstr(a, arr))!=NULL)
                    {
                            while(q!=p)
                            {
                                    c++;
                                    q++;    
                            }
                            printf("c >> %d\n", c);    
                    }
            }
    }
#包括
#包括
int main(int argc,字符**argv)
{
文件*fp=fopen(argv[1],“r”);
int len,i=0,c=0;
fseek(fp,0,SEEK_END);
len=ftell(fp);//文件中的字符数
倒带(fp);
字符ch,arr[len],*p,*q;
while((ch=fgetc(fp))!=EOF)//将文件复制到arr[len]
{
arr[i]=ch;
i++;
}
倒带(fp);
chara[200];
而((fgets(a,200,fp))//a包含来自fp的行
{
q=a;//q指向a的基址
如果((p=strstr(a,arr))!=NULL)
{
while(q!=p)
{
C++;
q++;
}
printf(“c>>%d\n”,c);
}
}
}

即使文件中存在子字符串,输出也不会打印任何内容,我希望c打印数组的索引。

您错过了参数的顺序(除了所有其他问题):


因此,在变量
a

中保存的任何内容中,您都无法找到文件的全部内容。一旦将其复制到数组中,您不需要重新扫描文件,只需扫描返回
int
的数组注释即可。这实际上对
EOF
检查非常重要。至于您的问题,现在可能是学习如何调试程序的好时机。使用调试器,您可以在监视变量及其值的同时逐个语句地逐步执行代码。您要将哪个子字符串与之进行比较?看起来您只是从文件(数组)中添加了200个符号,并将其与整个文件内容进行比较,这对我来说毫无意义。请提供简单的输入和预期的输出,以便正确理解您想要实现的目标
const char * strstr ( const char * str1, const char * str2 );
      char * strstr (       char * str1, const char * str2 );

Locate substring
Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.