关于c语言数组越界访问问题

img


#define _CRT_SECURE_NO_WARNINGS

#include  <stdio.h>

#include<string.h>
int main(void)
{
    int count=1;
    char number[20]={0};
    char *p = number;
    gets_s(number);
    if (*p == '1')
    {
        *p++;
        while (*p >= '0' && *p <= '9')
        {
            count++;
            *p++;
        }
        if (count == 11)
        {
            printf("yes");
            return 0;
        }
    }
    printf("no");
    return 0;
}

运行后c语言数组越界访问
是不gets的问题

img


如何修改

重写写了一个,你可以试试

int main()
{
    char s[20];
    printf("请输入手机号码\n");
    scanf("%s",&s);
    if(strlen(s)==11&&s[0]=='1')
    {
        for(int i=0;i<11;++i)
        {
            char ch=s[i];
            if(ch<'0'&&ch>'9')
            {
                printf("no\n");
                break;
            }
        }
        printf("yes\n");
    }else
    {
        printf("no\n");
    }
}

img

加一个while循环判断指针p是否访问到字符串结束的判断再看看,不知道有没有效?


 
 
#define _CRT_SECURE_NO_WARNINGS
 
#include  <stdio.h>
 
#include<string.h>
int main(void)
{
    int count=1;
    char number[20]={0};
    char *p = number;
    gets(number);
    if (*p == '1')
    {
        *p++;
        while (*p!='\0'){
            while (*p >= '0' && *p <= '9')
            {
                count++;
                *p++;
            }
             if (count == 11)
            {
                printf("yes");
                return 0;
            }
        }
       
    }
   
// 
   
    printf("no");
    return 0;
}