代码运行后查找出无效值,求纠错一下



```c
#include<stdio.h>
#include<malloc.h>
 int binary_search(int p[],int k,int sz)
      {
          
          int left=0;
          
          int right=sz-1;
             
             while(left<=right)
             {
                 
                 int mid=(left+right)/2;
                 if(p[mid]<k)
                 {
                     left=mid+1;
                     //return(-1);
                 }
                 else if(p[mid]>k)
                 {
                     right=mid-1;
                     //return(-1);
                 }
                 else if(p[mid]=k)
                 {
                     return(mid);
                 }
             }
          return(-1);
          
      }
     
      
          
      
      int main(void)
      {
          int len,i,k;
          int *p;
          while(1){
          
              printf("请输入你要存放的元素个数。\n");
         scanf("%d",&len); 
         p=(int*)malloc(sizeof(int)*len);
         printf("注意:数组为有序数组.\n");
         printf("请输入你要存储的元素值。\n");
         for(i=0;i<len;++i)
         {         
         scanf(" %d",&p[i]);    
      }
      fflush(stdin);
          //int sz=sizeof(p)/sizeof(p[0]);
      printf("请输入要查找的元素值.\n");
          scanf("%d",&k);
              int sz=sizeof(p)/sizeof(p[0]);
          int binary_search(int p[],int k,int sz);
           int ret=binary_search(p,k,sz);
          
          if(ret==-1)
          {
              printf("找不到指定数字\n");
          }
          else
          {
              printf("找到了,下标是 %d\n",ret);
              
          }
    }
          return 0;
      }

```

代码有些问题
1.binary_search内第三个代码段的判断条件应该使用两个等号else if (p[mid] == k)
2.sz无法正常计算数组长度,指针不保存长度信息,只有数组变量才可以用sizeof求长度,请使用int ret = binary_search(p, k, len);

判断是否相等应该两个等于
第27行:else(p[mid]==k)