用gets()读入一个字符串后,strlen()返回值不是字符串的长度且大到离谱

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUMEL 81

int main()
{
char str1[NUMEL];
char str2[NUMEL];
int choice;//定义一个变量判断是否继续输入

void string_in(char*,char*);//声明函数 


do
{ 
  printf("请分别输入两个字符串:\n");
  gets(str1);
  gets(str2);//读入两个字符串 
  
  printf("%d",strlen(str1));
   
  if(strlen(str1)<strlen(str2))//若第一个字符串长度小于第二个字符串 
    printf("NULL\n"); 
  else
    string_in(str1,str2);  
  printf("输入1选择继续,0选择停止。\n");
}while(scanf("%d",&choice)==1,getchar());
 
return 0;

}
void string_in(char *str1,char *str2)
{
char *p;
int i=0,j=0,temp;

for(i=0;i<strlen(str1)&&j<strlen(str2);1)//下标越界结束循环 
{
  if(*(str1+i)!=*(str2+j))//第一个字符串元素从0开始挨个与第二个字符串第0个元素比较 
    temp=++i; 
  else
  {
    i++,j++;
    if(*(str2+j)=='\0')
       ;  
    if(*(str2+j)!='\0'&&*(str1+i)==*(str2+j))
    {
        i++;j++;
    }
    else//一旦出现不相等则从上次相等元素后一个元素与第二个字符串首个元素开始对比 
    {
        j=0;i=temp+1;
    }
  }
} 

if(j==0)//没有被包含 
  printf("NULL\n");
else//包含 
{
  p=str1+temp;//将地址传给指针 
  printf("第二个字符串第一个字母%c在第一个字符串中的地址为%p\n",*p,p); 
}    

}

img

img

能否贴出完整的代码以及你的输入截图

main函数没写?

#include <stdio.h>
#include <string.h>

int main()
{
   char str[81];
    gets(str);
   printf("%d\n",strlen(str));
   
   return 0;
}

哈哈哈 容我笑一会