C strstr问题,即使应该是1却返回0?

标签 c strstr

花了一些时间尝试调试这个。 Strstr 总是返回 0,即使我传递一个像“town”这样应该有意义的参数并打印 1。我在这里做错了什么?

#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)) // Always 0 never 1?
            printf("Track %i: '%s'\n", i, tracks[i]);
    }
}

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

最佳答案

函数fgets在字符串中包含新行字符'\n',它对应于按下的Enter键。

您应该在调用函数 find_track 之前将其删除

size_t n = strlen( search_for );
if ( n && search_for[n-1] == '\n' ) search_for[--n] = '\0';

考虑到最好以不处理全局数组的方式编写函数,这样会更通用。两个数组(包括全局数组的大小)应该是其参数

关于C strstr问题,即使应该是1却返回0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31105454/

相关文章:

PHP strstr - 反向方法

c - strstr 函数不返回 NULL

c++ - eclipse mars c/c++ 不会在 Windows 7 上构建

运行优化代码时无法写入文件

c - 这段C代码执行后j的值是多少?

c - 如何在包含 null 的缓冲区中搜索子字符串?

检查一个字符串是否是另一个字符串的子字符串

C - Eclipse - "Mixed"方言和 ANSI 支持崩溃程序吗?

c - 查找和控制以太网看门狗定时器

c - 使用 strstr 确定给定字符串是否包含带空格的字符串 [C]