我现在在编写的程序中遇到了一些问题。
这是我的主要内容:
int main() {
char haystack[250],
needle[20];
int currentCharacter,
i=0;
fgets(needle,sizeof(needle),stdin); //getting my substring here (needle)
while((currentCharacter=getchar())!=EOF) //getting my string here (haystack)
{
haystack[i]=currentCharacter;
i++;
}
wordInString(haystack,needle);
return(0);
}
和我的职能:
int wordInString(const char *str, const char * wd)
{
char *ret;
ret = strstr(str,wd);
printf("The substring is: %s\n", ret);
return 0;
}
答案 0 :(得分:2)
您使用fgets()
读取一个字符串,使用getchar()
读取另一个字符串到文件末尾。在两个字符串的末尾都有一个尾随'\n'
,因此strstr()
只能匹配子字符串,如果它位于主字符串的末尾。
此外,您不会在'\0'
的末尾存储最终haystack
。您必须执行此操作,因为haystack
是本地数组(自动存储),因此不会隐式初始化。
您可以通过这种方式解决问题:
//getting my substring here (needle)
if (!fgets(needle, sizeof(needle), stdin)) {
// unexpected EOF, exit
exit(1);
}
needle[strcspn(needle, "\n")] = '\0';
//getting my string here (haystack)
if (!fgets(haystack, sizeof(haystack), stdin)) {
// unexpected EOF, exit
exit(1);
}
haystack[strcspn(haystack, "\n")] = '\0';