VS2017 我用scanf_s输入的,无法用strcmp与"000000"比较

我学习链表,遇到scanf_s与strcmp的问题:代码如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning (disable:4996)
#pragma warning (disable:4703)
typedef struct stu
{
    char name[55]; //姓名
    char xuehao[10];//学号
    struct stu *next;//指针域
}kk;
kk *create(int n)
{
    int i = 1;
    kk *head=NULL, *new, *tail;//创建三个结构体指针
    for (; i <= n; i++)
    {
        new=(kk *)malloc(sizeof(kk)); //申请节点
        printf("请输入第%d个学号:", i);
        scanf_s("%s", &new->xuehao,6);//输入6位学号
        if (strcmp(new->xuehao, "000000") == 0)//学号为000000,则结束
        {
            printf("输入错误");
            free(new);
            break;

        }
        printf("请输入第%d个姓名:",i);
        scanf_s("%s", &new->name,55);
        new->next = NULL; //指针域为空
        if(i==1)  head=new; 
       else      tail->next=new;        
         tail=new;                  
        

    }
    return head;
}
void main()

{
    int n,i;
    kk* p;
    printf("请输入人员个数:");
    scanf("%d", &n);
    p = create( n);

    for (i = 1; i <= n; i++)
    {
        printf("%s", p->name);
        p = p->next;
    }
    
}

img


遇到"000000"并没有退出,反而进行下面的;
把scanf_s改为scanf就不会出现这种情况

img

为什么勒

首先,你上面那个还算勉强正常运行,下面改成scanf都已经报错了。再就是scanf_s("%s", &new->xuehao,6);这句里的两个参数都是有问题的。new->xuehao是一个数组名,本身已经是一个地址是不需要&取地址的,然后每个字符串最后都要有个结束符,所以这里你想要接收6个字符的字符串,长度应该设成7。

scanf_s("%s", new->xuehao,6)