c - 在从文件中提取的字符串中查找输入子字符串

标签 c string strstr

<分区>

基本上,我想知道为什么这段代码不起作用。 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");
    }

}

最佳答案

这很可能是 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 终止它。

关于c - 在从文件中提取的字符串中查找输入子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34575623/

相关文章:

使用子字符串检查字符串是否存在(使用链表)

c - 如何使队列线程安全

c - 如何将套接字 recv(,,,) 用于不确定的响应长度

python - 如何从 Python 中的十六进制字符串中删除 '\x'?

java - 查看字符串是否包含数组中的元素

java - 测试字符串的 hashCode

strstr() 与 Knuth Morris Pratt

c - 如何在屏幕上显示搜索到的字符串?

c - 在GtkAssistant中使用Glade文件

c - 未找到 mqueue.h