strstr不会返回真值

时间:2014-07-19 01:47:15

标签: c strstr string.h

我正在C编程手册中研究这个例子,当值为true时,strstr命令应该触发printf命令。它试图在曲目中找到一个字符串,并返回它所找到的曲目。我已经花了一个多小时,并且似乎无法找到错误。目前,即使应该匹配也不会打印任何内容。

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

char tracks[][80] = {
        "Boston",
        "Where the Streets Have No Name",
        "Row Row Row your Boat",
        "Gangsta Paradise",
        "Yoda",
    };


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

    }
}

int main(){

    char searchFor[80];
    printf("what is your string?: ");
    fgets(searchFor, 80, stdin);
    printf("searching for: %s", searchFor);
    findTrack(searchFor);

    return 0;
}

3 个答案:

答案 0 :(得分:2)

我建议你输入搜索字符串 - 你可能会发现在行尾有一个换行符。您应该在要搜索的字符串中包含换行符,或者从输入中删除它。

您可以按照以下方式执行此操作:

char *p = strchr(searchFor, '\n');
if (p!=NULL) *p='\0';

此外,我建议您使用“干净”代码编写

if(strstr(tracks[i], searchFor)!=NULL) {

这清楚地表明您了解strstr返回指针。

答案 1 :(得分:1)

补充@floris answer ...

将指针转换为布尔值的巧妙技巧是对指针(!! pointer)进行双重求反,如下所示:

if(!!strstr(tracks[i], searchFor))
    printf("Track %i: '%s'\n", i, tracks[i]);

答案 2 :(得分:0)

这是因为fgets()将在输入中添加换行符。因此,SerchFor输入将变为"SearchFor\n"(输入)。 要进行比较,您必须删除换行符。

代码如下:

int len = strlen(buffer);

if(buffer[len-1]=='\n')
   buffer[len-1]='\0'; 

您可以在fgets()之后添加此代码。