qq_28505783 2016-05-09 13:43 采纳率: 100%
浏览 4747
已采纳

为何c语言中会出现读取位置时发生访问冲突

我是写字符串检索。但是如果把jiansuo()这个函数中第二个if(cha(p2)==(p3-p2+1))的话就没问题了。也就是说后边不能==i,如果是i的话,就出错~~

#include
int cha(char *p1)
{
int num=0;
for (char *p = p1; *p!= '\0'; p++)
{
num++;
}
return num;
}
void jiansuo(char *p1,char *p2)
{
for (char *p = p1; p<(p+cha(p1)-cha(p2)); p++)
{
int i = 0;
for (char *p3 = p2; *p3 != '\0'; p3++,i++)
{
if (*p3 != *(p+(p3-p2)))
{
break;
}
if (cha(p2)== i)
{
printf("找到了!在第%d个",p-p1+1);
return;
}
}
}
printf("没找到\n");
}
void main()
{
char *o = "tiandiwuji";
char *a = "diwu";
jiansuo(o,a);
getchar();
}图片

  • 写回答

2条回答 默认 最新

  • 小灸舞 2016-05-09 14:11
    关注

    有两个问题:
    1.for (char *p = p1; p<(p+cha(p1)-cha(p2)); p++)应该改成for (char *p = p1; p<(p1+cha(p1)-cha(p2)); p++)
    不然的话p<(p+cha(p1)-cha(p2))相当于p<p+6肯定恒满足啊,直到越界崩溃
    2.if (cha(p2)== i )改成if (cha(p2)== i + 1)因为i++是在当次for循环之后才执行的,只要之前没有break说明当前字符是相等的

     #include <stdio.h>
    #include <string.h>
    int cha(char *p1)
    {
        int num=0;
        for (char *p = p1; *p!= '\0'; p++)
        {
            num++;
        }
        return num;
    }
    void jiansuo(char *p1,char *p2)
    {
        for (char *p = p1; p<(p1+cha(p1)-cha(p2)); p++)
        {
            int i = 0;
            for (char *p3 = p2; *p3 != '\0'; p3++,i++)
            {
                if (*p3 != *(p+(p3-p2)))
                {
                    break;
                }
                if (cha(p2)== i + 1)
                {
                    printf("找到了!在第%d个",p-p1+1);
                    return;
                }
            }
        }
        printf("没找到\n");
    }
    void main()
    {
        char *o = "tiandiwuji";
        char *a = "diwui";
        jiansuo(o,a);
        getchar();
    
    }
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?