Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c fread古怪——只阅读少量项目_Objective C_Xcode_Macos_Fread - Fatal编程技术网

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。我原以为在这种情况下会发生严重的崩溃,我想这个系统对我来说太聪明了。(把你的评论写在答案里,我会相信的。)