这段代码的功能是:读取两行字符串,然后统计第一行字符串中出现了多少次第二行字符串(作为连续子串)。
代码的主要逻辑是:
1. 读取两行字符串到数组 a 和 b
2. 分别计算两个字符串的长度 p1 和 p2
3. 用嵌套循环遍历 a 中所有长度为 p2 的子串,与 b 逐字符比较
4. 如果完全匹配则计数加一
代码存在一个关键问题:
- 第二个 scanf 读取时,由于第一个 scanf 读取后输入缓冲区中可能残留换行符,导致第二个字符串无法正确读取。scanf("%[^\n]") 不会跳过开头的空白字符,所以第二个 scanf 会直接遇到换行符而读取失败。
- 另外,当 p1 < p2 时,外层循环条件 i < p1 - p2 + 1 会变成负数,导致循环行为异常。