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

时间:2014-12-19 01:12:45

标签: c++ memory memcpy

我对这段代码非常困难: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: \n\n";
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&lt;&lt; “缓冲区是:”&lt;&lt; typeid(* buffer).name()&lt;&lt; '\ n';给出缓冲区的是:c。此外,for循环被注释掉,因为它永远不会退出。该文件的前8个字符是:(定义,包括空格)上面代码中的单个语句给出0x7fffa7119610重复4次。

我需要多次搜索文件数据,逐个字符。我该怎么做才能做到这一点?如果我在一个字符数组中尝试memcpy,我该如何创建正确大小的数组呢?

1 个答案:

答案 0 :(得分:0)

1)for循环没有退出,因为你没有理由退出。你的条件(中间部分,两个分号之间)只是一个常数10:在C / C ++的世界里总是 true (因为它不是0所以循环永远不会退出。你需要像

这样的东西
for(i = 0; i < 10; i++)

如果你想循环运行10次。

2)你得到4次打印的相同值,因为这是要求打印的! ip是一个指针:你在表达式*ip++中增加了它指向的值(上一次你设法更新指针,一次):你有通过将&ip传递给cout来打印指针的地址它指向的值的地址,或其中包含的值)