关于文件的操作
【摘要】 C++文件操作
1.文件操作
FILE* fp = fopen("config.txt", "r");
if (!fp)
{
printf("文件打开失败\n");
}
else
{
char LineBuf[1024];
while (!feof(fp))
{
LineBuf[0] = 0;
if (fgets(LineBuf, sizeof(LineBuf) - 1, fp) == NULL)
{
continue;
}if (LineBuf[0] == '\0')
{
continue;
}
lblprocstring:
if (strlen(LineBuf) > 0)
{
if (LineBuf[strlen(LineBuf) - 1] == 10 || LineBuf[strlen(LineBuf) - 1] == 13) {
LineBuf[strlen(LineBuf) - 1] = 0;
goto lblprocstring;
}
}
if (strlen(LineBuf) <= 0)
{
continue;
}
printf("%s\n", LineBuf);
}
fclose(fp);
}
2.保存到文件中的结构体,字节对齐
对于要保存到文件中的结构体,结构体成员中不要出现指针类型成员变量,因为它所指向的内存地址很可能失效,一旦引用了失效的地址会导致程序运行崩溃
struct stu {
char name[30];
int age;
double score;
};
字节对齐这个问题和编译器有关,像这个结构体,有30+4+8=42个字节,但是在window上用VS的话你看他长度的话是48字节,因为window自动搞成8的整数倍,linux用gcc则是4的整数倍,你再linux上看他是44字节
如果把 这个结构体写入一个文件中,那在window生成后是48字节,再去linux打开时读出来是44字节,显然读出来的数据肯定出错,解决的办法是,定义结构体之前就用”#pragma pack(1)”设置结构体对齐方式是1字节对齐,按1字节对齐的意思就是告诉编译器不要去对齐,实际是多少字节就是多少字节,如果想要恢复默认的字节对齐方式,在定义结构体之后,可以使用”#pragma pack()”取消刚才的设置的对齐,这样不管是什么操作系统,读这个结构体都是42字节
修改后就是这样子
#pragma pack(1)
struct stu {
char name[30];
int age;
double score;
};
#pragma pack()
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)