C代码:代码1的一部分:
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#define READONLY "r"
#define UPDATE "r+"
#define FALSE 0
#define TRUE 1
typedef int Boolean;
# define ERROR -1
typedef struct {
int identification ;
char name[NAMESIZE] ;
char subject[SUBJECTSIZE] ;
int grade ;
} RECORD ;
typedef struct {
char type ;
RECORD student ;
} TRANSACTION ;
typedef struct {
char occupied ;
RECORD student ;
} MASTER ;
部分代码2:
void main(int argc, char *argv[])
{
FILE *fpmas,*fptrans ;
int current_key ,
relative_record_number ;
boolean allocated;
TRANSACTION transaction;
MASTER master ;
clrscr();
prog = argv[0];
代码3的一部分:
int read_master_record(FILE *fp,
int relative_record_number, MASTER *master)
{
if(fseek(fp, (long) relative_record_number
*sizeof(MASTER), SEEK_SET) !=0 )
return(ERROR) ;
else if(fread((char *)master, sizeof(MASTER), 1, fp) != 1)
return(ERROR) ;
else
return(relative_record_number) ;
}
我对红色标记区域(在我所附的图像文件中!),(char *)
,!=0
和!=1
感到困惑,分别在*sizeof(MASTER), SEEK_SET) !=0 )
和else if(fread((char *)master, sizeof(MASTER), 1, fp) != 1)
中。它们是什么意思?!我搜索了这些,但一无所获。有人能提供关于这些主题的任何文件或任何解释吗?!
Question on Red Marks!
1条答案
按热度按时间oxf4rvwz1#
首先,让我们用英语把这些部分分解开来,然后,我们可以确定一个意思。
第一条:
如果
fseek
的返回代码不为0,则返回错误。如果成功,则fseek
的返回值为0。因此,!= 0
=失败。第二个声明:
转换是不必要的,更多的是为了文档。将任何指针转换为
char*
总是安全的。这是一种说“我将此结构作为原始字节发送”的方式。如果
fread
的返回值不为1,则返回错误。fread
的返回值为:这里,我们检查返回值
!= 1
是否正确。因此,我们检查fread
是否正确读取了1项。