如何在C++读取块后访问内存中的文件数据

How to access file data in memory after a block read in C++

本文关键字:内存 文件 数据 访问 C++ 读取      更新时间:2023-10-16

我在这个代码块上遇到了非常困难的时间: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