有writefile向文件中写入结构体的有关问题
有writefile向文件中写入结构体的问题
如果char *buf=new char[1021];
strcpy(buf,(char*)&_BasInfo);后文件中会出现不是原来的字符.直接写结构体却没问题
------解决方案--------------------
结构体得定义应给出,初步判断应该是结构体中内存对齐的问题
------解决方案--------------------
(char*)&_BasInfo
结构能这么转吗
------解决方案--------------------
你调试一下
看看转完buf里是什么东西
就明白了
------解决方案--------------------
1 既然是结构体,如果是长度固定的话,就用二进制方式读写,怎样写进去的就怎样读出来
2 既然是写字符串,就应该使用字符串长度,你用了new 和 strcpy, buf中字符结尾后的数据并没有初始化,乱码是很正常的。
------解决方案--------------------
char *buf=new char[1021];
zeromemory( buf, 1021);
memcpy(buf,&_BasInfo, sizeof(BasInfo));
------解决方案--------------------
------解决方案--------------------
strcpy(buf,(char*)&_BasInfo);
这里用strcpy不对,strcpy的第二个参数应当指向0结尾的字符串,而该结构体可能是任何内容,且有可能会复制结构体变量之外的内存。
可以用memcpy函数取代。
------解决方案--------------------
假当你的结构体如下:
struct _BasInfo
{
int nXXXXX;
char *buffer;
}
如果你又
buffer = new BYTE[1024];或重新指向一个字符串
这时你写入 WriteFile(FileHandle,buf,sizeof(_BasInfo)+1,&Num,NULL);
sizeof(_BasInfo)多大?你说能不能把你的内容写完?这根本写入不到buffer中的内容.
- C/C++ code
FileHandle=CreateFileA(FilePath,GENERIC_READ |GENERIC_WRITE ,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_WRITE_THROUGH,0); if(FileHandle==INVALID_HANDLE_VALUE) { return false; } strcpy(_BasInfo.Pass,Pass); //_BasInfo.FriendNum=FriendNum; char *buf=new char[1021]; strcpy(buf,(char*)&_BasInfo); //Ep(buf); WriteFile(FileHandle,buf,sizeof(_BasInfo)+1,&Num,NULL);
如果char *buf=new char[1021];
strcpy(buf,(char*)&_BasInfo);后文件中会出现不是原来的字符.直接写结构体却没问题
------解决方案--------------------
结构体得定义应给出,初步判断应该是结构体中内存对齐的问题
------解决方案--------------------
(char*)&_BasInfo
结构能这么转吗
------解决方案--------------------
你调试一下
看看转完buf里是什么东西
就明白了
------解决方案--------------------
1 既然是结构体,如果是长度固定的话,就用二进制方式读写,怎样写进去的就怎样读出来
2 既然是写字符串,就应该使用字符串长度,你用了new 和 strcpy, buf中字符结尾后的数据并没有初始化,乱码是很正常的。
------解决方案--------------------
char *buf=new char[1021];
zeromemory( buf, 1021);
memcpy(buf,&_BasInfo, sizeof(BasInfo));
------解决方案--------------------
------解决方案--------------------
strcpy(buf,(char*)&_BasInfo);
这里用strcpy不对,strcpy的第二个参数应当指向0结尾的字符串,而该结构体可能是任何内容,且有可能会复制结构体变量之外的内存。
可以用memcpy函数取代。
------解决方案--------------------
假当你的结构体如下:
struct _BasInfo
{
int nXXXXX;
char *buffer;
}
如果你又
buffer = new BYTE[1024];或重新指向一个字符串
这时你写入 WriteFile(FileHandle,buf,sizeof(_BasInfo)+1,&Num,NULL);
sizeof(_BasInfo)多大?你说能不能把你的内容写完?这根本写入不到buffer中的内容.