我正在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;
}
答案 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()
之后添加此代码。