如何在C++读取块后访问内存中的文件数据
How to access file data in memory after a block read in C++
我在这个代码块上遇到了非常困难的时间:Ubuntu OS和g ++
is.open(name.c_str(),ios::in | std::ifstream::binary); }
while (!is) ; // this is the end of the user input loop, asking for "name"
// get length of file:
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
// allocate memory:
char * buffer = new char [length];
// read data as a block:
is.read (buffer,length);
is.close();
此代码有效,整个文件正确显示在我的终端上。当我尝试对文件数据执行任何其他操作时,会出现问题。我已经做到了这一点,从上面开始:
is.close();
std::cout.write (buffer,length);
char x;
int i;
char *it = buffer;
char *ip;
std::cout << "nbuffer contains: nn";
ip = it;
// for ( i = 0 ; 10 ; ++i ) {
// std::cout << &ip << "n";
// ip++ ; }
std::cout << &ip << "n";
*ip++ ;
std::cout << &ip << "n";
*ip++ ;
std::cout << &ip << "n";
ip++ ;
std::cout << &ip << "n";
std::cout << "n";
我用了这个,cout <<"buffer is: " <<typeid(*buffer(.name(( <<'';其中给出的缓冲区是:c。此外,for 循环被注释掉,因为它永远不会退出。该文件的前 8 个字符是:(定义,包括空格(上面代码中的单个语句给0x7fffa7119610重复 4 次。
我需要逐个字符多次搜索文件数据。我应该怎么做才能做到这一点?如果我尝试将memcpy放入字符数组中,如何创建大小合适的数组?
1(for
循环不会退出,因为你没有给它退出的理由。您的条件(中间部分,两个分号之间(只是一个常数10
:在C/C++的世界中,这始终是正确的(因为它不是0
(,因此循环永远不会退出。你需要类似的东西
for(i = 0; i < 10; i++)
如果您希望循环运行 10 次。
2(你得到相同的值打印4次,因为这就是要求它打印的! ip
是一个指针:您已经增加了它在表达式*ip++
中指向的值(上次您确实设法更新了指针一次(:并且您已经打印了指针的地址(不是它指向的值的地址,或其中包含的值(,通过将&ip
传递给cout
。
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- WinVerifyTrust 仅在使用文件而不是内存 blob 时才有效
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 内存映射文件访问非常慢
- 我正在尝试创建一个C++映射,该映射在boost内存映射文件中具有向量值
- 这些结构在文件中的大小不同,但在程序内存中的大小相同
- 在嵌入式系统中读取文件的内存碎片
- 如何从文件中读取 100x24 矩阵并将其作为浮点矩阵保存在内存中?
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 提升进程间共享内存删除、权限和输出文件
- 将内存文件添加到 clang 编译器实例
- 为什么我的 C++ 程序在执行 TCMALLOC 堆检查器或堆配置文件时使用大量内存
- C++ 从磁盘读取文件并将其写入共享内存
- 为什么在编译时需要知道对象的内存配置文件以进行堆栈放置?
- 增强共享内存:文件的卷已被外部更改,打开文件不再有效
- 在内存文件中使用
- 创建内存文件
- 将char指针映射到具有文件描述符的内存文件