我正在使用strstr()
函数的示例。
如果我输入" Pamela Sue Smith",为什么节目输出"" Pamela"是一个子串!"而不是"" Pamela Sue Smith"是一个子串!"。
#include <stdio.h>
#include <string.h>
void main(void)
{
char str[72];
char target[] = "Pamela Sue Smith";
printf("Enter your string: ");
scanf("%s", str);
if (strstr( target, str) != NULL )
printf(" %s is a sub-string!\n", str);
}
答案 0 :(得分:3)
答案 1 :(得分:3)
来自scanf
的手册页:
“s” - 匹配一系列非空白字符;下一个 指针必须是一个足够长的字符数组的指针 保持输入序列和终止空字节('\ 0'), 这是自动添加的。 输入字符串以白色停止 空格或最大字段宽度,以先到者为准。
因此,“苏史密斯”部分从未进入str
。您可以使用fgets
,这样您就可以一次读取整行:
if (fgets(str, sizeof str, stdin) == NULL) {
printf("End of file\n");
return;
}
请注意,在这种情况下,str
包含终止行尾字符。你可以做到
if (*str != '\0')
str[strlen(str) - 1] = '\0';
删除它。
(另外,正如其他一些人已经指出的那样,strstr
的“干草堆”论点是第一位的。)