C语言 struct 和 char* 的问题

作者&投稿:杜毅 (若有异议请与网页底部的电邮联系)
C语言struct对char数组赋值问题~

错误的原因同:
char a[20];
a[20]="djfidj" //这里使用了不存在的 数组元素a[20]

a.name[20]="Hellow"; 也是同理 不存在 a.name[20],
最后一个数组元素是a.name[19]

要记得 定义和引用是不一样的哦
可以用scanf("%s",a.name);

给你个例子。

#include

struct student{
char *num;
}A;

int main(){

A.num = "11";
printf(" %s",A.num);
}
这是指针,他指向num这个字符数组的第一个地址,所以不用strcpy,可以直接进行赋值,至于值会怎么变,自己看看内存

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

struct Student
{
int *banbie;
int *zuowei;
char (*xingming)[10];
char (*xingbie)[4];
float *yuwen;
float *shuxue;
float *yingyu;

int renshu;// 每个班级的人数
};

int main()
{
int a=0,b=0,c=0,d=0,e=0,f=0;
int banjishu=0;

struct Student *student;

printf("请问要输入多少个班级:");
scanf("%d",&banjishu);

student = (struct Student *)malloc(banjishu*sizeof(struct Student *));// 申请多少个班级

for (a=0;a<banjishu;a++)
{
printf("请输入第%d个班学生数:",a+1);
scanf("%d",&b);
student[a].renshu = b;
student[a].banbie=(int*)malloc(b*sizeof(int));
student[a].zuowei=(int*)malloc(b*sizeof(int));
student[a].xingming=(char(*)[10])malloc(b*sizeof(char(*)[10]));
student[a].xingbie=(char(*)[4])malloc(b*sizeof(char(*)[4]));
student[a].yuwen=(float*)malloc(b*sizeof(float));
student[a].shuxue=(float*)malloc(b*sizeof(float));
student[a].yingyu=(float*)malloc(b*sizeof(float));
c=c+b;
}

for (a=0;a<banjishu;a++)
{
printf("请输入第%d个班级学生信息",a+1);
printf("\n=================================\n");
for (int i=0;i<student[a].renshu;i++)
{
student[a].banbie[i] = a+1;// 对应的班级
student[a].zuowei[i] = i+1;// 对应的班级所在位置
printf("请输入第%d个学生姓名:",i+1);
scanf("%s",&student[a].xingming[i]);
printf("请输入第%d个学生性别:",i+1);
scanf("%s",&student[a].xingbie[i]);
printf("请输入第%d个学生语文成绩:",i+1);
scanf("%f",&student[a].yuwen[i]);
printf("请输入第%d个学生数学成绩:",i+1);
scanf("%f",&student[a].shuxue[i]);
printf("请输入第%d个学生英语成绩:",i+1);
scanf("%f",&student[a].yingyu[i]);
}
}

printf("总共有%d班级",banjishu);
for (a=0;a<banjishu;a++)
{
printf("\n=================================\n");
printf("第%d班级的总人数:%d",a+1,student[a].renshu);
printf("\n=================================\n");
for (int i=0;i<student[a].renshu;i++)
{
printf("班别:%d",student[a].banbie[i]);
printf("座位:%d",student[a].zuowei[i]);
printf("语文成绩:%.2f",student[a].yuwen[i]);
printf("数学成绩:%.2f",student[a].shuxue[i]);
printf("英语成绩:%.2f",student[a].yingyu[i]);
printf("姓名:%s",student[a].xingming[i]);
printf("性别:%s",student[a].xingbie[i]);
printf("\n********************************\n");
}
}

for (a=0;a<banjishu;a++)
{
free(student[a].xingming);
free(student[a].xingbie);
free(student[a].banbie);
free(student[a].zuowei);
free(student[a].yuwen);
free(student[a].shuxue);
free(student[a].yingyu);
}

free(student);

你的意思应该是创建多个班级,和对应的班级人数。是不是这样。

struct Student
{
int *banbie;
char *xingming;
char *xingbie;
float *yuwen;
float *shuxue;
float *yingyu;
};

为什么非用指针变量呢?还有malloc生成的空间记得给关闭。

让人无语的程序,
添加一个这个#include <stdlib.h>
再把上面的malloc(a*sizeof(float))
改成calloc(a,sizeof(float))好看一些...
太难改了
姓名是用字符啊得用指针的指针......

记录字符串应使用char**型. 改法比较纠结.因为c语言建议大家使用已知长度上限的字串. 更建议一个学生记录在一个结构体里.


辽阳市19360836139: c语言,求详解,并且说一下每个字母代表的含义,比如说struct是关键字,是结构体数据类型的标志, -
掌高盐酸: struct STD { char name[10]; int age; char sex; } s[5],*ps; 其中,struct表示后面定义一个结构,结构名为STD;结构名后面跟一对大括号,大括号中的是结构体,也就是结构包含的内容;STD结构包含一个名为name的字符数组,可以存放姓名的...

辽阳市19360836139: C语言中,struct用什么来定义? -
掌高盐酸: struct是一种类型(结构体类型)与int、float一样的,它是为了解决C语言类型单调而设计的.在它里面可以出现int、string类型等C语言类型.使用它不需要定义,常常用它定义结构体.如定义一学生结构体: struct students {int age;int Number;char name[20]; } 还可以通过结构体建立C语言的灵魂——链表 如:struct student {int data; struct student *next; }

辽阳市19360836139: C语言的结构体类型是什么数据?数据有哪些类型? -
掌高盐酸: 结构体类型就是以struct关键字定义的数据类型. 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.是一种聚合类型,里面可以包含多种数据类型,甚至可以结构体里嵌套结构体.相信我,等你深入理解了...

辽阳市19360836139: C语言 struct与指针 -
掌高盐酸: struct a;a属于普通结构变量,(比如int a;整型变量.占用4个字节的内存,内存地址固定,只要没有声明为const则其值可变)struct a的内存占用大小视我们规定struct拥有哪些变量,总大小就是它的内部变量占用字节之和.那么,类似的.指针...

辽阳市19360836139: C语言结构体数组的定义和赋值 -
掌高盐酸: C99标准出来以前,C语言不支持动态定义数组大小,只能采用动态分配指针方式来完成动态数组的个数定义.如: struct st {int x,y;char str[10]; }; struct st *array ; int n; printf("input n: "); scanf("%d", &n); array=(struct st*)malloc(n*sizeof(struct ...

辽阳市19360836139: C语言 struct -
掌高盐酸: 定义 struct Card { int ID; //卡号 char name[20]; //姓名 double value; //金额 int flag; //挂失信息 }; //特别注意,这里的分号不可以少 以后,struct Card就是和int,char一样是一种类型了然后可以定义变量 struct Card card; card.ID,card.flag等等就...

辽阳市19360836139: C语言结构体中struct和typedef struct有什么区别? -
掌高盐酸: C语言结构体中struct和typedef struct区别为:声明不同、访问不同、重新定义不同. 一、声明不同 1、struct:struct可以直接使用结构体名字声明结构体. 2、typedef struct:typedef struct的为.修饰结构体,结构体有了别名,通过结构体别名声明...

辽阳市19360836139: 什么是结构体类型?C语言中结构体类型占几个字节? -
掌高盐酸: 结构体类型就是一种数据类型撒,譬如定义一个整型变量int a;意思是a的数据类型是整形的,定义一个结构体变量b,他的数据类型就是结构体类型的!!

辽阳市19360836139: 计算机C语言中的关键字:struct是什么意思?
掌高盐酸: 自定义结构类型(类似于int,double这些基本类型,不过是符合类型),往往用来描述复合数据(比如一个学生的记录(因为包含姓名、性别))……

辽阳市19360836139: c语言中struct 的用法!谁知道!讲讲!谢谢! -
掌高盐酸: 结构类型定义和结构变量说明 在实际问题中,一组数据往往具有不同的数据类型.例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;成绩可为整型或实型. 显然不能用一个数组来存放这一...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网