c++文件流结构体怎么读取写入操作\\内存异常
c++文件流结构体如何读取写入操作\\内存错误?
------解决思路----------------------
1)为什么sprintf里面全部要取地址&操作,这是为何?
2)输出float用%f,输出double用%lf
出现错误了不会调试吗,gdb,valgrind都可以啊。
------解决思路----------------------
1)为什么sprintf里面全部要取地址&操作,这是为何?
2) 字符数组大小+1 试试
typedef struct CRowShowDataStu{
int m_ID; //4
int m_EnterID; //4
string m_Name; //20
double m_EyeX; //30
double m_EyeY; //30
double m_EyeZ; //30
float m_EyePoseX; //20
float m_EyePoseY; //20
float m_EyePoseZ; //20
int m_Visable; //1
double m_ModelX; //30
double m_ModelY; //30
double m_ModelZ; //30
float m_ModelPoseX; //20
float m_ModelPoseY; //20
float m_ModelPoseZ; //20
}CRowShowData;
std::vector<CRowShowData> m_RowShowData;
bool CRowShowObj::WriteFile(string FilePath)
{
CRowShowData Temp;
Temp.m_ID = 1;
Temp.m_EnterID = 0;
Temp.m_Name = "call.ive";
Temp.m_EyeX = 0.0;
Temp.m_EyeY = 0.0;
Temp.m_EyeZ = 0.0;
Temp.m_EyePoseX = 1.0f;
Temp.m_EyePoseY = 1.0f;
Temp.m_EyePoseZ = 1.0f;
Temp.m_Visable = 1;
Temp.m_ModelX = 0.0;
Temp.m_ModelY = -0.5;
Temp.m_ModelZ = 0.0;
Temp.m_ModelPoseX = 1.0f;
Temp.m_ModelPoseY = 1.0f;
Temp.m_ModelPoseZ = 1.0f;
m_RowShowData.push_back(Temp);
Temp.m_ID = 2;
Temp.m_EnterID = 0;
Temp.m_Name = "ceep.ive";
Temp.m_EyeX = 0.0;
Temp.m_EyeY = 0.0;
Temp.m_EyeZ = 0.0;
Temp.m_EyePoseX = 1.0f;
Temp.m_EyePoseY = 1.0f;
Temp.m_EyePoseZ = 1.0f;
Temp.m_Visable = 1;
Temp.m_ModelX = 0.0;
Temp.m_ModelY = 0.5;
Temp.m_ModelZ = 0.0;
Temp.m_ModelPoseX = 1.0f;
Temp.m_ModelPoseY = 1.0f;
Temp.m_ModelPoseZ = 1.0f;
m_RowShowData.push_back(Temp);
try
{
ofstream file;
char sz[329];
file.open(FilePath.c_str());
vector<CRowShowData>::iterator Temp;
for(Temp= m_RowShowData.begin();Temp!= m_RowShowData.end();Temp++)
{
memset(sz,0,329);
sprintf(sz, "%4d%4d%20s%30f%30f%30f%20f%20f%20f%1d%30f%30f%30f%20f%20f%20f", \
&Temp->m_ID, &Temp->m_EnterID,Temp->m_Name.c_str(),\
&Temp->m_EyeX, &Temp->m_EyeY,&Temp->m_EyeZ,\
&Temp->m_EyePoseX, &Temp->m_EyePoseY,&Temp->m_EyePoseZ,\
&Temp->m_Visable,\
&Temp->m_ModelX,&Temp->m_ModelY,&Temp->m_ModelZ,\
&Temp->m_ModelPoseX,&Temp->m_ModelPoseY,&Temp->m_ModelPoseZ);
file.write(sz,329);
}
file.close();
}
catch(...)
{
//TRACE0((LPCTSTR)e.Description());
return false;
}
return true;
}
------解决思路----------------------
1)为什么sprintf里面全部要取地址&操作,这是为何?
2)输出float用%f,输出double用%lf
出现错误了不会调试吗,gdb,valgrind都可以啊。
------解决思路----------------------
1)为什么sprintf里面全部要取地址&操作,这是为何?
2) 字符数组大小+1 试试