gpt4 book ai didi

c - strstr 仅当我的子字符串位于字符串末尾时才有效

转载 作者:行者123 更新时间:2023-11-30 18:52:53 26 4
gpt4 key购买 nike

我现在编写的程序遇到了一些问题。

  1. strstr 仅当子字符串位于字符串末尾时才输出 enter image description here
  2. 此后它还会输出一些垃圾字符 enter image description here
  3. 我在使用“const char *haystack”然后向其中添加输入时遇到了问题,因此我使用 fgets 和 getchar 循环来完成此操作
  4. 在整个过程中,它使用的子字符串不仅位于末尾,而且随后我输出了子字符串以及字符串的其余部分

这是我的主要内容:

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;
}

最佳答案

您用 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';

关于c - strstr 仅当我的子字符串位于字符串末尾时才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34048907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com