字符串匹配的 C 代码 [Head First C] 似乎不起作用

标签 c pointers

#include <stdio.h>
#include <string.h>

char tracks[][80] = {
"I left my heart in Harvard Med School",
"Newark, Newark - a wonderful town",
"Dancing with a Dork",
"From here to maternity",
"The girl from Iwo Jima",
};

void find_track(char search_for[])
{
    int i;
    for (i = 0; i < 5; i++)
    {
        if (strstr(tracks[i], search_for))
        printf("Track %i: '%s'\n", i, tracks[i]);
    }

}
int main()
{
    char search_for[80];
    printf("Search for: ");
    fgets(search_for, 80, stdin);
    find_track(search_for);
    getch();
    return 0;

}

这是直接从 Head First C 中获取的代码。这行不通。另一方面 如果我在 main 中更改行

char search_for[80];

char *search_for = "town"

它给了我预期的结果。我不明白为什么它不起作用。我知道直接粘贴代码并告诉您查找错误在这里不是很可接受,但我想这是一小段基本代码,所以它可以。

谢谢

最佳答案

上面代码的问题在于它没有考虑到 fgets 在字符串中留下换行符。因此,当您键入 town 并按下 enter 时,您最终将搜索 "town\n"

解决此问题的一种廉价方法是在调用 fgets

后修复字符串
search_for[strlen(search_for) - 1] = 0;

关于字符串匹配的 C 代码 [Head First C] 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019607/

相关文章:

c - 比 printf 更快的函数

c - 尝试用 C 语言编写一个程序,用随机数填充数组

C11网络编程

c++ - 错误 : argument of type "float(*)[1] " is incompatible with parameter of type "float** "

c - 警告 : conflicting types for built-in function ‘strlen’ int strlen (char *pstr);

c++指向整数的指针在减去时给出不同的答案

c - 动态地将结构数组扩展到更大的尺寸

c++在模板函数中初始化大小为 "static * int"的char数组

c - 通过指针索引到 char 数组时出现段错误

c - 如何正确地制定计数算法来从文件中计数?