基本上,我想知道为什么这段代码不起作用。似乎strstr()
的值始终为NULL
,因为所有这些代码都是"word not found"
。
我已经尝试了if (strstr(retezec,substring)!=NULL)
,但它也无效。
int main()
{
FILE *files;
files = fopen("Knihovna.txt","rb+");
int i = 0;
while(fgetc(files)!=EOF){
i++;
}
//printf("%d",i);
rewind(files);
char *retezec;
retezec = (char *)malloc(i);
fread(retezec, i, 1, files);
puts("zadejte hledane slovo");
char *substring;
substring = (char *)malloc(50);
fflush(stdin);
fgets(substring,49, stdin);
char *found;
found = strstr(retezec,substring);
if(found){
printf("word found!");
}
else{
puts("word not found");
}
}
答案 0 :(得分:3)
最有可能是fgets()
阅读尾随换行符的结果。
fgets(substring,49, stdin);
如果substring
有空格,这将读取尾随换行符。所以如果输入"name"
。你实际上有"name\n"
。
使用以下内容删除尾随换行符:
char *p = strchr(substring, '\n');
if (p) *p = 0; // remove the newline, if present
你还有另外一个问题。 fread()
NUL没有终止。它只是读取请求的字节。因此,您需要检查fread()
是否读取i
个字节或更少,并使用该数字(返回值fread()
)来查找读取的实际字节数。因为它可能少于要求。然后,分配一个额外的字节,如果你想把它用作C字符串,NUL就会终止它。