strstr() 函数
Posted
技术标签:
【中文标题】strstr() 函数【英文标题】:strstr() function 【发布时间】:2013-05-30 03:13:41 【问题描述】:我正在尝试编写一个程序,将用户输入的子字符串与字符串数组进行比较。
#include <stdio.h>
#include <string.h>
char animals[][20] =
"dogs are cool",
"frogs are freaky",
"monkeys are crazy"
;
int main()
char input[10];
puts("Enter animal name: ");
fgets(input, sizeof(input), stdin);
int i;
for(i = 0; i < 3; i++)
if(strstr(animals[i], input))
printf("%s", animals[i]);
return 0;
例如,当我输入青蛙时,它应该打印消息“青蛙很奇怪”,但它什么也没打印。
于是我试着写了一行打印出strstr()函数的值,每次都返回0,这意味着所有的比较都失败了。我不明白为什么,有人可以帮我吗?
【问题讨论】:
【参考方案1】:fgets
在缓冲区中包含输入换行符。您的字符串中没有换行符,因此它们永远不会匹配。
【讨论】:
【参考方案2】:fgets()
很可能包含用户按 Enter 时输入的换行符。删除它:
char *p = strchr(input, '\n');
if (p)
*p = 0;
【讨论】:
*p = 0;
== *p = '\0'
??【参考方案3】:
这是因为您的字符串包含换行符。
来自fgets
documentation:
换行符使 fgets 停止读取,但它被函数视为有效字符并包含在复制到 str 的字符串中。
这应该可以解决问题 (demo):
#include <stdio.h>
#include <string.h>
char animals[][20] =
"dogs are cool",
"frogs are freaky",
"monkeys are crazy"
;
int main()
char input[10];
printf("Enter animal name: ");
scanf("%9s", input);
int i;
for(i = 0; i < 3; i++)
if(strstr(animals[i], input))
printf("%s", animals[i]);
return 0;
【讨论】:
以上是关于strstr() 函数的主要内容,如果未能解决你的问题,请参考以下文章