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