第一功能输入文件和子的名字之一是试图文件函数strstr只能检测到文本文件最后一行的子字符串?
void userinput(char filename[],char word[])
{
printf("Enter the name of the file\n");
gets(filename);
printf("Enter the word\n");
gets(word);
}
二函数读取文件并打印字符串的地址,如果它能够发现它在寻找。
void findandreplace(char filename[], char word[])
{
FILE *infile;
char *ptr1,*ptr2,filearray[1024];
infile=fopen(filename,"r");
if(infile==NULL)
{
perror("Could not open file");
exit(EXIT_FAILURE);
}
while(fgets(filearray,sizeof(filearray),infile)!=NULL)
ptr1=filearray;
if(strstr(filearray,word))
{
ptr2=strstr(ptr1,word);
printf("%p",ptr2);
}
else
{
printf("Entered word not found in file");
}
}
功能的strstr仅能够检测出在文件的最后一行的子,我知道这与fgets叶子在缓冲尾随换行符,但我用得到的功能为用户输入,所以在这种情况下,这不是原因。
有人能让我知道为什么会发生这种情况吗?
你知道'gets'已被弃用,并且不应该被使用,因为它不会检查缓冲区溢出,对吧?它的手册页声明,它不应该被使用。它只存在于与旧应用程序的向后兼容性。 –
它看起来像是你的问题的原因是你正在阅读和放弃除了最后的文件的所有文件,然后检查字符串的存在。 while循环只读取1024个字符的块并丢弃它们,直到达到结尾。然后它搜索最后读取的块。对'ptr1'的赋值没有任何用处,因为它只是'filearray'的别名(除非第一次读取失败,在这种情况下它是未定义的)。 –
@TomKarzes'gets'在1999年至2011年间已被弃用。自2011年起不再存在 –