Objective c fread古怪——只阅读少量项目
在一个相当大的命令行应用程序的中间,这个应用程序一直在工作。对处理超出缓冲区的文件进行了一些更改,并遇到了来自Objective c fread古怪——只阅读少量项目,objective-c,xcode,macos,fread,Objective C,Xcode,Macos,Fread,在一个相当大的命令行应用程序的中间,这个应用程序一直在工作。对处理超出缓冲区的文件进行了一些更改,并遇到了来自fread的奇怪结果 DebugLog(@"Reading %d samples of a total %d samples of size %d, leaving %d samples remaining", numSamplesToRead, numSamplesInFile, sizeof(short) * channels * scaleFactor, numSamplesRem
fread
的奇怪结果
DebugLog(@"Reading %d samples of a total %d samples of size %d, leaving %d samples remaining", numSamplesToRead, numSamplesInFile, sizeof(short) * channels * scaleFactor, numSamplesRemainingInFile);
DebugLog(@"Position in file is %d", ftell(in));
items = fread(dataBuffer, sizeof(short) * channels * scaleFactor, numSamplesToRead, in);
DebugLog(@"%d samples read", items);
DebugLog(@"Position in file is %d", ftell(in));
这将产生以下输出:
<main:(604)> Reading 29278208 samples of a total 115202048 samples of size 8, leaving 85923840 samples remaining
<main:(605)> Position in file is 512
<main:(607)> 448 samples read
<main:(608)> Position in file is 58560512
读取总共115202048个大小为8的样本中的29278208个样本,剩下85923840个样本
文件中的位置是512
读取448个样本
文件中的位置是58560512
(所讨论的文件大小为225008K。)
那么,我如何才能只读取448个样本,每个样本有8个字节,并从位置512移动到位置58560512呢?为什么没有读取请求的数据量?fread()的返回值应该与
nitems
参数相同(numItemsToRead
,在您的情况下)。items
和numItemsToRead
不同的事实表明读取时出现了问题,但是由于文件指针已经超过了读取的内容,可能是缓冲区出了问题
您应该检查
errno
和/或ferror()
以查看是否有任何相关信息。我认为items
小于numSamplesToRead
表示读取错误。errno
是否有相关值?嗯。。。perror显示“坏地址”,但缓冲区地址似乎是好的,我不知道它会指的是什么其他地址。ferror的值为1。请让我检查缓冲区分配是否足够大。好的,看起来我的缓冲区太小了2。我原以为在这种情况下会发生严重的崩溃,我想这个系统对我来说太聪明了。(把你的评论写在答案里,我会相信的。)