我有一个非常困难的时期的代码块:Ubuntu的操作系统和g ++如何访问文件数据在内存中后块读取C++
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 < < “缓冲液是:” < < typeid的(*缓冲液)。名称()< < '\ n';这给了缓冲区是:c。另外,for循环被注释掉了,因为它没有退出。该文件的前8个字符是:(定义,包括空格)上面代码中的单个语句给出0x7fffa7119610重复4次。
我需要多次搜索文件数据,逐个字符。我该怎么做才能做到这一点?如果我尝试将memcpy写入一个字符数组中,我该如何创建正确大小的数组?
数据已存在于'缓冲区'中,所以您发布的代码不会告诉我们您所说的错误。 – PaulMcKenzie 2014-12-19 01:16:25
两件事:1)你发布的代码示例是乱码。什么是“} while(!is);”应该是关于? 2)解释你的意思是“文件数据似乎被存储为长整数”。那是什么意思?其实,关于你的问题还有第三个令人困惑的部分:“当我尝试使用读取来解决任何输出问题”。 “阅读”通常指的是阅读输入,而不是输出。请重写你的问题并澄清它。 – 2014-12-19 01:16:59
请显示未按预期工作的代码。此外,是什么让你认为“文件数据似乎被存储为长整数”?它是'char'。我们真正需要帮助的是[MCVE](https://stackoverflow.com/help/mcve)。 – 5gon12eder 2014-12-19 01:17:13