最终计算0,即使阅读成功
count eventually 0 even though read successful
我正在编写一个iOS应用程序,该应用使用C 代码,该代码正在使用ISTream读取文件的数据片段。该代码有效,但它反复使用,最终达到了读取的限制,然后出现问题。它似乎已成功地读取,但GCOUNT返回0。这不是特定的文件或情况。感觉就像有些iStream会议陷入了我无法摆脱的不良状态。我正在关闭我打开的文件。
这就是我打开流的方式
iFiles.push_back(new ifstream([[[arrayOfPaths objectAtIndex:i] absoluteString] cStringUsingEncoding:NSASCIIStringEncoding] , ios::in | ios::binary));
然后,我有一个循环,我可以在此文件中阅读:
while (!iStreams[0]->eof())
{
vector<vector<int64_t> > matrix;
int length = 0;
for (int i = 0; i < rows; i++)
{
char * buffer = new char [DEMUX_BUFFER];
iStreams[i]->read(buffer, DEMUX_BUFFER);
int int64Groups;
if(iStreams[i]->gcount() == 0)
{
//this is the catch for the bad case but buffer contains something even though count is 0
}
.....
这是一个很难问的问题,所以请让我知道您是否需要更多信息。我希望那里有人也有类似的问题。
谢谢
我认为我需要更多代码才能给出更好的答案,但是从您的代码中,我可以告诉您我第一次看的地方:
istream :: gcount返回最后一个未形式提取的字符数 在对象上执行的输入操作。
这意味着,当到达文件的末尾时,GCount将返回0,因为上次读取操作无法读取任何新数据。
现在,由于空间已分配,因此在缓冲区中有一些随机位是正常的,但是您从未将缓冲区归零。因此,缓冲区将包含一些随机分配的内存中的一些随机位。为了避免混乱,您可以添加一个语句,该语句将清除缓冲区最初通过添加此语句的任何垃圾,并在其分配之后:
memset(buffer, 0, sizeof(buffer));
换句话说,当您的gcount返回0时,这意味着没有从istreams [i]读取的新数据。
我希望这会有所帮助!
- Alex
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- cmake在我的项目中所需的所有静态库都不成功
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 最终计算0,即使阅读成功
- cudaMalloc 在静态大小方面取得了成功,但在动态计算大小方面失败了
- 计算' cin.getline() '是否成功