与fstream和指针混淆
Confused with fstream and pointers
我想写一个函数,它接受fstream
,处理它,并在第二个参数中的struct
中填充信息。
我的问题是,当我遇到调试错误时,我很困惑如何使用指针和fstream:
访问违规写入位置0xcccccccccc。
以下是主要功能:
int main()
{
keyframe_struct kfstruct;
string ifile = "filename";
ifstream fin( ifile, ios::binary );
load_from_keyframe_file( fin, kfstruct );
fin.close();
cout << kfstruct.num_keyframes << endl;
return 0;
}
下面是我试图用来解析二进制文件并填充结构kfstruct中的信息的函数:
struct keyframe_struct
{
int num_views;
int num_keyframes;
vector<keyframe> keyframes;
};
int load_from_keyframe_file( ifstream &fin, keyframe_struct &kfstruct )
{
char keyword[100];
while ( !fin.eof() )
{
fin.getline( keyword, 100, 0 );
if ( strcmp( keyword, "views" ) == 0 )
{
fin.read(( char* ) kfstruct.num_views, sizeof( int ) );
}
else if ( strcmp( keyword, "keyframes" ) == 0 )
{
fin.read(( char* ) kfstruct.num_keyframes, sizeof( int ) );
}
}
}
你能告诉我我做错了什么吗?我确信我在这里犯了一些巨大的错误,因为我只是一个初学者,我仍然不清楚我应该做什么,不应该用指针做什么。
您忘记获取字段的地址:
fin.read(( char* ) &kfstruct.num_views, sizeof( int ) );
^^^
[顺便说一句,请注意,从维护的角度来看,最好执行sizeof(kfstruct.num_views)
。因此,如果类型发生变化,您的代码仍然可以工作。]
而不是
( char* ) kfstruct.num_views
使用
( char* ) (&kfstruct.num_views)
在另一个地方也是如此。
否则,您正在向一个地址等于int值的位置写入。您不希望这样。您希望将地址转换为char*
。你用"&"取地址操作人员
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- 为什么我的简单C++程序使用队列和 fstream 错误到无效指针
- 无法在 Visual Studio 中使用指针和 fstream 运行程序
- 您可以使用指针指向FSTREAM文件吗?
- 做一个popen(),将文件*指针放入fstream中,pclose()呢?
- fstream指针未指向
- 试图将指针作为参数传递给指向文件的fstream成员
- 无法声明 fstream 对象?但是可以将其声明为指针吗?
- c++中fstream指针的映射
- 与fstream和指针混淆
- fstream读/写移动文件指针