【韦德国际1946手机版】C语言结构体,C语言大校

作者: 韦德国际1946手机版  发布:2019-07-09

 能够使用fwrite()将二个结构体写入文件:
  fwrite(&some_struct,sizeof somestruct,1,fp);
相应的fread函数能够再把它读出来,此处fwrite受到一个构造的指针并把那几个布局的内部存款和储蓄器影象作为字节流写入文件。sizeof操作符总计出结构占用的字节数。
唯独这么用内部存储器影像写出的数据文件却是不可见移植的,极其是当协会中涵盖浮点成员或指针的时候。结构的内存布局跟机器和编写翻译器都有关。分裂的编写翻译器可能应用不一样数量的填充位,分裂机器上着力项指标轻重和字节顺序也不尽一样。因而,作为内部存款和储蓄器印象写出的结构在别的机器上(乃至是被其余编写翻译器编写翻译之后)不分明能被读回来。
  同临时候注意倘使组织富含其余指针(char*字符串或针对任何数据结构的指针),则唯有指针值会被写入文件。当它们重新被读回来的时候或者曾经失效。最终为了广大的可移植性,你必需用“b”标记展开文件。

C语言中的结构体,C语言结构体

  • 布局体类型的概念:
1 struct student
2 {
3    int id; 
4    char name[10];
5 
6 };

注:student是自定义的数据类型,实际不是变量像int,char 是骨干数据类型,

  • 结构体变量的概念和援用:
1 struct student 
2 {
3     int id;
4     char name[10];
5 } mike,lily; //直接定义两个结构体变量

 

1 student mike ={123,{'m','i','k','e'}};//定义变量并初始化
2 mike.id = 20130000  mike.id //使用
3 for(int i = 0; mike.name[i] != '\0'; i  )
4     mike.name[i]= toupper(mike.name[i]);
5 cout<<"ID: "<<mike.id<<"name: "<<mike.name<<endl;//
  • 结构体变量的囤积:

三个结构体变量据有一片一而再的内部存款和储蓄器空间

  • 结构体变量的赋值:
1 student mike ={123,{'m','i','k','e'}};
2 student lily;
3 lily = mike;//可以直接赋值,对应的变量也赋值
  • 结构体变量作函数的参数

与变量做函数参数一样,形参和实参直接进行值传递时,只copy四个副本,与数组名作参数区别

  • 结构体变量作函数的再次回到值

也是copy二个别本进行赋值

  • 针对结构体的指针:
student mike={123,{'m','i','k','e'}};
student *ps = &mike; 
cout<<"ID: "<<(*ps).id<<"name: " <<(*ps).name<<endl;
cout<<"ID:"<<ps->id<<"name: "<<ps->name<<endl;
  • 布局体数组:
1 struct student 
2 {
3     int id;
4     char name[10];
5 } stu[10];

 

  • 总括:结构体数据类型的特色与普通数据类型的风味是一致的

 

结构体类型的概念: 1 struct student 2 { 3 int id; 4 char name[ 10 ]; 5 6 }; 注:student是自定义的数据类型,实际不是变...

c语言把结构体内容写入文件难点
#include
#define m 2
main(){
int i;
【韦德国际1946手机版】C语言结构体,C语言大校结构体写入文件。FILE *fp;
typedef struct{
int year;
int month;
int day;
}date;
struct student{
int number;

C语言read()函数:读文件函数(由已展开的文书读取数据)

读写结构体的程序如下:

char name[20];
date birth;
}student1[m];
fp=fopen("student.doc","w");
for(i=0;i<m;i ){
student1[i].number=i;
scanf("%s",student1[i].name);
scanf("%d%d%d",&(student1[i].birth.year),&(student1[i].birth.month),&(student1[i].birth.day));
fwrite(&(student1[i]),sizeof(struct student),1,fp);
}
fclose;
}

头文件:

将结构体写入文件:

韦德国际1946手机版 1韦德国际1946手机版 2

#include <unistd.h>

韦德国际1946手机版 3韦德国际1946手机版 4View Code

概念函数:

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

ssize_t read(intfd,void* buf,size_tcount);

typedef struct {
    char c;
    int h;
    short n;
    long m;
    float f;
    double d1;
    char *s;
    double d2;
}st;
int main(void)
{
    FILE *fp;
    st sa,sb;
    char *str="abcdefg";
    sa.c='K';
    sa.h=-3;
    sa.n=20;
    sa.m=100000000;
    sa.f=33.32f;
    sa.d1=78.572;
    sa.d2=33.637;
    sa.s=str;
    fp=fopen("st.txt","w ");
    if(!fp)
    {
        printf("errror!n");
        exit(-1);
    }
    printf("sa:c=%c,h=%d,n=%d,m=%d,f=%f,d1=%f,s=%s,d2=%fn",sa.c,sa.h,sa.n,sa.m,sa.f,sa.d1,sa.s,sa.d2);
    printf("sizeof(sa)=%d:&c=%x,&h=%x,&n=%x,&m=%x,&f=%x,&d1=%x,&s=%x,&d2=%xn",sizeof(sa),&sa.c,&sa.h,&sa.n,&sa.m,&sa.f,&sa.d1,&sa.s,&sa.d2);
    fwrite(&sa,sizeof(sa),1,fp);
    rewind(fp);
    fread(&sb,sizeof(sb),1,fp);
    printf("sb:c=%c,h=%d,n=%d,m=%d,f=%f,d1=%f,s=%s,d2=%fn",sb.c,sb.h,sb.n,sb.m,sb.f,sb.d1,sb.s,sb.d2);
       
    fclose(fp);
    
    return 0;
}

函数表明:read()会把参数fd 所指的公文字传递送count 个字节到buf 指针所指的内部存款和储蓄器中. 若参数count 为0,

从文件中读出结构体:

则read()不会有机能并重临0. 重返值为实际读取到的字节数, 即使重回0,

韦德国际1946手机版 5韦德国际1946手机版 6View Code

代表已到达文件尾或是无可读取的数目,其它文件读写地方会随读取到的字节移动.

本文由韦德国际1946发布于韦德国际1946手机版,转载请注明出处:【韦德国际1946手机版】C语言结构体,C语言大校

关键词: 语言 文件 体内 结构 浅学系统编程