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

时间:2015-06-28 22:36:39

标签: c strstr

花了一段时间试图调试这个。 Strstr总是返回0,即使我传递了一个像“城镇”这样有意义并且打印的论点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;
}

1 个答案:

答案 0 :(得分:4)

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

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

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

考虑到编写函数会更好地解决它不会处理全局数组的问题会更好。包括全局数组大小的两个数组都应该是它的参数