C语言读取文档的结构体
把结构体内容写入.txt文件中
//write.c
#include <stdio.h>
struct test{
int a;
float b;
};
int main()
{
struct test v = {
1, 2.3};
FILE *fp;
fp = fopen("save.txt", "w");
if(fp == NULL)return -1;
fprintf(fp, "%d %f", v.a, v.b);
fclose(fp);
return 0;
}
fprintf函数可以把数据以可读的形式写入到文件中,最后写出来的文件输出样式为:
1 2.300000
我用过fwrite写入到文件中,会出现乱码,然后读取出来的数据也会出现乱码的形式。暂时还没想到什么原因。知道的小伙伴可以留言教一下我。
读取文件中的结构体
// read.c
#include <stdio.h>
struct test{
int a;
float b;
};
int main()
{
struct test v;
FILE *fp;
fp = fopen("save.txt", "r");
if(fp == NULL)return -1;
fscanf(fp, "%d%f", &v.a, &v.b);
printf("get, a=%d, b=%f
", v.a, v.b);
fclose(fp);
return 0;
}
读取结构体的话使用fscanf函数,该函数会把文件中符合int的块和float块找出来,然后给到对应的内存空间。
暂时用这个解决了可以读取结构体的问题。 现在碰到的新问题是,用read和write函数读写结构体就会出现一些问题。
在同一个文件中读写结构体是可以的。
// demo1.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
struct Test{
int age;
char *name;
};
int main()
{
const char *pathname = "./test.txt";
int fd = open(pathname, O_RDWR|O_CREAT|O_APPEND, S_IRWXU);
if(fd == -1){
perror("file open fail:");
exit(-1);
}else{
// ssize_t write(int fd, const void *buf, size_t count);
/*char *buf = "try to write something in it.
";
int count = strlen(buf);*/
struct Test test={
10, "testname"};
int write_byte = write(fd, &test, sizeof(struct Test));
if (write_byte == -1){
perror("write failed:");
exit(-1);
}else{
printf("write_byte=%d
", write_byte);
printf("write success!
");
}
}
struct Test data2;
// read
int ret_read = read(fd, &data2, sizeof(struct Test));
printf("read age=%d, name=%s
", data2.age, data2.name);
close(fd);
return 0;
}
这样子是可以打印出10 和 testname。但是如果我把读写操作分开写,一个文件写,一个文件读,最后读的操作会出现读不到的情况,之后会去思考以下这个问题,如果有懂的小伙伴留言告诉一下,大家一起学习啊。
