【问题标题】:Why doesn't strstr appear to be working in my C program? [duplicate]为什么 strstr 在我的 C 程序中似乎不起作用? [复制]
【发布时间】:2013-04-12 09:19:11
【问题描述】:

源码如下:

#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);
    return 0;
}

当我使用程序如下:

搜索:城镇

我会期待类似的东西

曲目 1:“纽瓦克,纽瓦克 - 一个美妙的小镇”

相反,我的程序退出并且不打印任何内容。我做错了什么?

【问题讨论】:

    标签: c


    【解决方案1】:
    fgets(search_for, 80, stdin);
    

    将用于将输入发送到程序的换行符留在输入缓冲区中,因此作为第二个参数传递给strstr的字符串实际上是

    "town\n"
    

    这不是任何tracks 的子字符串,因此没有找到匹配项,也没有打印任何内容。

    从缓冲区中删除换行符,

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

    让它搜索"town"

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 2014-01-09
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      相关资源
      最近更新 更多