gpt4 book ai didi

c - C中的随机访问函数问题

转载 作者:行者123 更新时间:2023-12-01 07:46:35 24 4
gpt4 key购买 nike

我正在尝试学习 C,而我正在使用的书(Apress 的“Learn C”)中有一章对随机访问函数非常困惑。以下代码让我感到困惑:

 int    GetNumberOfDinos( void ) {
FILE *fp;
long fileLength;

if ( (fp = fopen( kDinoFileName, "r" )) == NULL )
DoError( "Couldn't open file...Goodbye!" );

if ( fseek( fp, 0L, SEEK_END ) != 0 )
DoError( "Couldn't seek to end of file...Goodbye!" );

if ( (fileLength = ftell( fp )) == -1L )
DoError( "ftell() failed...Goodbye!" );

fclose( fp );

return( (int)(fileLength / kDinoRecordSize) );
}

我理解代码的目的,但不了解该目的是如何实现的。 fopen 行很容易理解。 fseek 和 ftell 是我的麻烦开始的地方。 fseek 的参数是文件、偏移量,然后是 3 个 SEEK 之一。为什么在那里给出它不为零的条件?如果文件确实存在(kDinoFileName),并且他们想指向该文件的末尾,为什么位置为零?文件存在,有信息!然后我完全不明白 ftell 函数怎么会以 -1L 结束?这段代码是否比它需要的更难?

最佳答案

代码只是检查错误。 fseek() 成功返回 0,失败返回非零。 ftell() 失败时返回 -1。

至于“为什么位置会是零?” - fseek() 调用请求从文件末尾查找 (SEEK_END)。文件末尾的零字节是..文件的末尾。所以

fseek( fp, 0L, SEEK_END )

是将文件指针移动到文件末尾的请求。

代码执行以下步骤:

  1. 打开文件
  2. 求到底
  3. 获取文件指针的位置(因为我们在最后告诉您文件中有多少字节 - 注意,严格来说文件需要使用二进制访问打开,例如使用“rb” ,这是真的)

由于错误处理,代码有些复杂。许多书籍和文章正是出于这个原因而忽略了错误处理。但是,这有一个缺点,那就是教人们忽略错误情况。

关于c - C中的随机访问函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3908639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com