本文目录一览:
- 1、C语言 结构体指针字符 二进制文件写入和读取
- 2、c语言中怎么把一个结构体数组写入文件
- 3、C语言编程学生信息结构体,保存文本文件或二进制文件中.求大神知道啊。
- 4、c++中如何向二进制文件读写含有string类型的结构体变量
C语言 结构体指针字符 二进制文件写入和读取
当然不对了,你的结构体成员,是一个指针
sizeof(student) ,win32是4字节,win64是8字节
当读入其中4个或8个字节时,它指向的指针地址并不一定存在
你可以定义为一个字符数组
c语言中怎么把一个结构体数组写入文件
C语言把一个结构体数组写入文件分三步:
1、以二进制写方式(wb)打开文件
2、调用写入函数fwrite()将结构体数据写入文件
3、关闭文件指针
相应的,读文件也要与之匹配:
1、以二进制读方式(rb)打开文件
2、调用读文件函数fread()读取文件中的数据到结构体变量
3、关闭文件指针
参考代码如下:
#includestdio.h
struct stu {
char name[30];
int age;
double score;
};
int read_file();
int write_file();
int main()
{
if ( write_file() 0 ) //将结构体数据写入文件
return -1;
read_file(); //读文件,并显示数据
return 0;
}
int write_file()
{
FILE *fp=NULL;
struct stu student={"zhang san", 18, 99.5};
fp=fopen( "stu.dat", "wb" ); //b表示以二进制方式打开文件
if( fp == NULL ) //打开文件失败,返回错误信息
{
printf("open file for write error\n");
return -1;
}
fwrite( student, sizeof(struct stu), 1, fp ); //向文件中写入数据
fclose(fp);//关闭文件
return 0;
}
int read_file()
{
FILE *fp=NULL;
struct stu student;
fp=fopen( "stu.dat", "rb" );//b表示以二进制方式打开文件
if( fp == NULL ) //打开文件失败,返回错误信息
{
printf("open file for read error\n");
return -1;
}
fread( student, sizeof(struct stu), 1, fp ); //读文件中数据到结构体
printf("name=\"%s\" age=%d score=%.2lf\n", student.name, student.age, student.score ); //显示结构体中的数据
fclose(fp);//关闭文件
return 0;
}
fwrite(const void*buffer,size_t size,size_t count,FILE*stream);
(1)buffer:指向结构体的指针(数据首地址)
(2)size:一个数据项的大小(一般为结构体大小)
(3)count: 要写入的数据项的个数,即size的个数
(4)stream:文件指针。
C语言编程学生信息结构体,保存文本文件或二进制文件中.求大神知道啊。
你需要用到打开文本或者创建一个文本写入相关的知识,当然还有结构体;
(“结构体”跟“C语言文件”请自行百度百科)
//首先定义学生结构体
struct strudent{
int score;
int num;}
然后当然他有各种数据
然后在main()函数中用到fopen;
*f=fopen("x://student.txt,w);用‘w’打开的话若没有文件会创建一个文件;
if(f=NULL)//判断打开是否失败
printf("打开失败");//接下去就是写入,你可以使用二进制文件操作
******下面是资料*****
3.1 数据块存取函数
函数原型:
_CRTIMP size_t __cdecl fread(void *, size_t, size_t, FILE *);
_CRTIMP size_t __cdecl fwrite(const void *, size_t, size_t, FILE *);
当要求一次存取一组数据(如,一个数组、一个结构体变量的值),fread和fwrite函数可以解决该类问题。它们的调用形式一般为:
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
buffer:对于fread来说,指的是读入数据的存放地址;对于fwrite来说,是要输出数据的地址。
size:读写数据时,每笔数据的大小
count:读写数据的笔数
**********************
所以剩下的就是
fwrite(student_1, sizeof(student), 1, f);
当然,为了更好的存储数据,你完全可以把student设计成数组。够了吧,需要用到的资料百度百科或者个人博客上都有,我连关键字都留给你了。手打~
c++中如何向二进制文件读写含有string类型的结构体变量
代码样例:
#include stdio.h
#includestring
using namespace std;
struct student
{
string name;
string num;
string age;
};
void main()
{
FILE *fp;
char *buf, *p;
int nfileSize;
char terminator = 0;
struct student src;
struct student dst;
src.name = "nihao";
src.num = "123456";
src.age = "18";
//写入文件
fp = fopen("data.txt", "wb+");
fwrite(src.name.c_str(), 1, src.name.length(), fp);
fwrite(terminator, 1, 1, fp);
fwrite(src.num.c_str(), 1, src.num.length(), fp);
fwrite(terminator, 1, 1, fp);
fwrite(src.age.c_str(), 1, src.age.length(), fp);
fwrite(terminator, 1, 1, fp);
fclose(fp);
//从文件中读取
fp = fopen("data.txt", "rb");
fseek(fp, 0, SEEK_END);
nfileSize = ftell(fp);
fseek(fp, 0, SEEK_SET);
buf = (char*)malloc(nfileSize);
fread(buf, 1, nfileSize, fp);
p = buf;
dst.name = p;
p = p + strlen(p) + 1;
dst.num = p;
p = p + strlen(p) + 1;
dst.age = p;
free(buf);
fclose(fp);
printf("Name: %s\nNum: %s\nAge:%s\n", dst.name.c_str(), dst.num.c_str(), dst.age.c_str());
}
执行结果: