当前位置:首页 » 服务存储 » 用结构体存储变量并打开文件
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

用结构体存储变量并打开文件

发布时间: 2023-05-24 02:06:06

① 关于c语言中结构体和文件读取输出问题

  • C语言中对结构体数据格式文件进行读取时,必须以二进制格式打开文件,然后按结构体类型变量内存块方式进行数据读取,相关读数据命令为fread()。

  • 函数说明:

    #include<stdio.h>

    size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream);

    从stream文件流中,读取nmemb个size大小的数据块到ptr所指的内存buf中,返回读取到的有效数据块数。

  • 如,有如下结构体定义:

    typedefstructTEST

    {

    intnum;

    doublescore;

    }STRTEST;

    STRTESTdata;

    FILE*fp=fopen("file.dat","rb");//按二进制格式打开文件

    intn=fread(&data,sizeof(STRTEST),1,fp);//读取一个数据块到变量data中。

  • 注意,当结构体中定义的变量有指针类型时,在存储数据时,就不能按结构体进行存储了。

    因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,只存储内存地址,不能把真正的数据保存下来,所以,尘返即使是正确派简饥读取到文件内容,也不能得到当时的结构体内存数据。因而,咐蚂在存储结构体数据时,要根据结构体类型变量特点采用正确的方法进行存储,才能正确的读取。

② C语言结构体如何存入文件

最好用2进制方法打开文皮差件,用逗握行fwrite 写文件。读时也用用2进制方法打开文件,用fread读.x0dx0a这样,写的时候按整个结构写,读也按整个结构读,字山哗符串有空白也没关系。x0dx0aFILE *fp;x0dx0a x0dx0afp=fopen("my.dat","wb");x0dx0afwrite(&stu,sizeof(stu),1,fp); // 写1个结构x0dx0afor (i=0;i<10;i++) fwrite(&student[i],sizeof(student),1,fp); // 写10个结构x0dx0afclose(fp);x0dx0a x0dx0afp=fopen("my.dat","rb");x0dx0afread(&stu,sizeof(stu),1,fp); // 读1个结构x0dx0afor (i=0;i<10;i++) fread(&student[i],sizeof(student),1,fp); // 读 10个结构x0dx0afclose(fp);

③ C++ 将结构体中的数据存入文件 哪位大侠棒棒我,小妹谢谢!急啊!好的话,再加分!

#include <fstream> // 文件流头文件.
#include <iostream>
using namespace std;

struct ST // 你的结构
{
string name;
int age;
int score;

};

ostream& operator <<(ostream& os, const ST& st){
os << st.name << " "咐早 << st.age << " " << st.score; // 输出流, 依次输出成员, 用空格隔开
return os;
}

istream& operator >>(istream& is, ST& st){
is >> st.name >> st.age >> st.score; // 输入流
return is;
}
// 现在就可以使用流了.

int main( ){
ofstream ofs("D:\\123.txt"); // ofstream 是C++文件输出流
ST st; // 一个临时变量

cout << "请输衡碧雀入 名字 年龄 分数" << endl;
cin >> st; // 读取用户的输入. 这里调用了前面定义的operator >>

ofs << st << endl; // 把st保存到文件中.
ofs.close(); // 关闭文件

ifstream ifs("D:\\123.txt"); // 还是打开刚才的文件, ifstream是文件输入流
ifs >> st; //慧森 从文件中读取一个st数据.
cout << st << endl; // 把它输出到控制台

ifs.close(); // 关闭文件
return 0;
}

主要就在于开头的重载ST特定的 >> 和 <<

④ C中将结构体写入文件及读取

需要导入的头文件

假设有结构体:

结构体写入文件的方法:

函数fopen是一个标准c函数,其功能是打开一个文件,之后便可以进行读或写的操作.其原型是这样的:FILE *fopen( const char *filename, const char *mode );

第一个参数是要打开文件的名字(路径),第二个参弯亮嫌数是打开文件所用的模式.对于模式参数的”w”和”wb”,”r”和”rb”,我起初并不是很理解,按照课本上的说法,”w”是以文本的形式进行写入,而”wb”是以二进制模式进行写入.这样的解释令人感觉有点玄乎,不能准确理解.

最近写了个小程序,把数据以16进制的形式存到一个文件中,当从文件中读取时,发现读取的数据不对,进行调试时,发现读取的数据与写入文件中的数据发生了错位,进行调试发现写入时并没有错误,读取时,怎么就发生错位了呢?调试了半天发现每遇到0x0A,在它前面就会多一个0x0D.

那么,是什么原因造成的呢?几经周折之后,终于发现是fopen的参数引起的.如果这么写:fp = fopen(str,"wb");可以得到正常数据,而fp = fopen(str,"w");就得不到正常数据,遇到0x0A时,就会在埋手其前面多一个0x0D.

原来,如果有参数b,是以二进制方式打开,这种方式不会进行”回车符”和”换行符”的转换.而如果没有b,即单以”w”为参数的话,系统就把换行符0A转换为0D0A,因为windows是以0D0A为换行符的键并.

fgets()与fputs()

gets()与puts()一起

scanf是接受的单词 遇空格也会停止

⑤ 怎样将内存中的结构体数组写入和读取文本文件

C语言把一个结构体数组写入文件分三步:
1、以带则旦二进制写方式(wb)打开文件
2、调用写入函数fwrite()将结盯昌构体数据写入文件
3、关闭文件指针
相应的,读文件也要与之匹配:
1、以二进制读方式(rb)打开文件
2、调用读文件函数fread()读取文件中的数据到结蠢扰构体变量
3、关闭文件指针
参考代码如下:
#include<stdio.h>
struct stu {
char name[30];
int age;
double score;
};

⑥ c语言怎么把一个结构体存入文件,在把文件读取怎

C语言,要将结构体中的数据存到磁盘上需要使用与文件操作相关的库函数。
首先要使用文件打开函数fopen()。
fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
其次,使用文件读写函数读取文件。
在C语言中提供了多种文件读写的函数:
·字符读写函数 :fgetc和fputc
·字符串读写函数:fgets和fputs
·数据块读写函数:freed和fwrite
·格式化读写函数:fscanf和fprinf
最后,在文件读取结束要使用文件关闭函数fclose()关闭文件。

下面使用格式化读写函数fscanf和fprintf实现对文件A.txt(各项信息以空格分割)的读取,并存入结构体数组a中,并将它的信息以新的格式(用制表符分割各项信息)写入B.txt,实现对A.txt的处理。

C语言源程序如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct student{
char name[32];
int no;
char sex[16];
float score;
} stu;

int main(int argc, char* argv[])
{
//打开文件
FILE * r=fopen("A.txt","r");
assert(r!=NULL);
FILE * w=fopen("B.txt","w");
assert(w!=NULL);

//读写文件
stu a[128];
int i=0;
while(fscanf(r,"%s%d%s%f",a[i].name,&a[i].no,a[i].sex,&a[i].score)!=EOF)
{
printf("%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到显示器屏幕
fprintf(w,"%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到文件B.txt
i++;
}

//关闭文件
fclose(r);
fclose(w);

system("pause");
return 0;
}

⑦ c#结构体数据的存取

读取/写入文件可以用羡搏坦FileStream,兄桐保存结构体数据可以用序列化,也可以建一个byte数组然后手动把结构体中的每个字段用BitConverter转换成byte[],再拷贝到之银贺前建的byte数组里。

⑧ 用结构体来存储从文件读上来的数据,涉及到对齐的地方,直接把数据丢掉了

看你文件中的数据是怎么来的
如果你文件中的数据 也是通过这个结构体写入的,那么就没问题的。
如果不是按塌春照这个结构体写入的,那么就有自己一套写入规则,按照这个规则,一个个元素去读,而不能整体去读。
结构体对齐不是为了存数据设计的,而是为了内存访问速度。

比如说,喊丛你文件中如果就是固定的49+16+4+4的格式,那就先团渗耐读49个,再读16个 再读4个,最后再读4个。

如果想省事,由不怕速度慢点,就设定1字节对齐,那就没问题了。