C strstr未返回所需结果
你能识别这段代码中的错误吗?即使我传递了有效的参数来查找,它也无法打印歌曲C strstr未返回所需结果,c,strstr,C,Strstr,你能识别这段代码中的错误吗?即使我传递了有效的参数来查找,它也无法打印歌曲 #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&qu
#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 askedSong[80];
printf("%s", "Hey buddy, what is the good one today? ");
fgets(askedSong, sizeof(askedSong), stdin);
find_track(askedSong);
return 0;
}
#包括
#包括
字符轨道[][80]={
“我把我的心留在哈佛医学院”,
“纽瓦克,纽瓦克-一个美妙的小镇”,
“和傻瓜跳舞”,
“从这里到产妇”,
“硫磺岛的女孩”,
};
void find_track(char search_for[])
{
int i;
对于(i=0;i<5;i++){
if(strstr(轨道[i],搜索){
printf(“磁道%i:'%s'\n',i,磁道[i]);
}
}
}
int main(){
char askedSong[80];
printf(“%s”,“嘿,伙计,今天有什么好的?”;
fgets(askedSong、sizeof(askedSong)、stdin);
查找_轨道(askedSong);
返回0;
}
这里的问题是,
fgets
在askedSong
中包含尾随的换行符'\n'
我是这样发现的---
我在调试器中运行了该程序,并在find\u track()
中设置了一个断点。然后,当出现提示时,我在命令行中输入了“girl”,并看到函数的参数是“girl\n”
以下是我在调试器中看到的内容:
Hey buddy, what is the good one today? girl
Breakpoint 1, find_track (search_for=0x7fffffffd9c0 "girl\n") at test.c:15
15 for(i = 0; i < 5; i++) {
(gdb)
嘿,伙计,今天的好节目是什么?女孩
断点1,在测试中查找跟踪(搜索=0x7fffffffd9c0“女孩”\n)。c:15
15表示(i=0;i<5;i++){
(gdb)
有很多奇怪的方法来修剪C中的“\n”:fgets extra的问题(回车)
#包括
#包括
字符轨道[][80]={
“我把我的心留在哈佛医学院”,
“纽瓦克,纽瓦克-一个美妙的小镇”,
“和傻瓜跳舞”,
“从这里到产妇”,
“硫磺岛的女孩”,
};
void find_track(char search_for[])
{
int i;
对于(i=0;i<5;i++){
if(strstr(磁道[i],搜索)!=NULL){
printf(“磁道%i:'%s'\n',i,磁道[i]);
}
}
}
int main(){
char askedSong[80];
printf(“%s”,“嘿,伙计,今天有什么好的?”;
scanf(“%s”,askedSong);//尝试使用scanf在缓冲区中创建ovoid\n
查找_轨道(askedSong);
返回0;
}
fgets
在字符串中保留换行符。轻松修复:
fgets(askedSong, sizeof(askedSong), stdin);
askedSong[strcspn(askedSong, "\n")] = 0;
请注意,fgets()将换行符视为有效字符并将其加载到字符串中。多谢老兄,该建议帮助了我!我根本不知道fgets在末尾插入新行字符的事情。问题是scanf不允许使用空格字符串,而且它在处理大小方面也有问题。在我的情况下,我认为这不是最好的oOption.抱歉响应太晚。但仅为提供信息,您可以允许使用空格字符串。您还可以定义字符串的大小示例。`scanf(“%80[^\n]”,askedSong);`.plz(如果您现在不尝试它)。这非常有帮助。
fgets(askedSong, sizeof(askedSong), stdin);
askedSong[strcspn(askedSong, "\n")] = 0;