【问题标题】:How to access file data in memory after a block read in C++在 C++ 中读取块后如何访问内存中的文件数据
【发布时间】:2014-12-19 01:12:44
【问题描述】:

我在这段代码中遇到了困难: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

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

【问题讨论】:

  • 数据已经在buffer,所以你发布的代码没有告诉我们你说的哪里出了问题。
  • 两件事:1)您发布的代码示例是乱码。什么是“} 而 (!is) ;”应该是关于? 2)解释“文件数据似乎存储为长整数”语句的含义。这意味着什么?实际上,关于您的问题还有第三个令人困惑的部分:“当我尝试使用 read 处理要输出的任何内容时”。 “读取”通常是指读取输入,而不是产生输出。请重写您的问题并澄清它。
  • 请显示未按预期工作的代码。另外,是什么让您认为“文件数据似乎存储为长整数”?它是chars。我们真正需要帮助您的是MCVE

标签: c++ memory memcpy


【解决方案1】:

1) for 循环不会退出,因为您没有给它退出的理由。您的条件(中间部分,两个分号之间)只是一个常量10:在 C / C++ 的世界中,它始终是 true(因为它不是 0)所以循环永不放弃。你需要类似的东西

for(i = 0; i < 10; i++)

如果你想让一个循环运行 10 次。

2) 您打印了 4 次相同的值,因为这是要求它打印的! ip 是一个指针:您在表达式*ip++ 中增加了 它指向的值(上一轮您确实设法更新了指针一次):并且您已经打印了 通过将&amp;ip 传递给cout 来获取指针的地址不是它指向的值的地址,或者包含在那里的值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2021-12-09
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多