我试图从文件中读取两条记录,其中一条是十六进制格式的数字。好吧,我是C的新手,在我阅读由ftok()
生成的十六进制之前,我只使用printf("%x", key)
并且它工作正常。现在,当我尝试从文件中读取它时,它不会那样工作。
所以我的代码看起来像这样:
int countRecords(FILE *f_p) {
int tmp_key = 0;
int tmp_msgqid = 0;
int n = 0;
while (!feof(f_p)) {
if (fscanf(f_p, "%x %i", &tmp_key, &tmp_msgqid) != 2)
break;
n = n + 1;
}
return n;
}
稍后我会在代码中读取此值,如:
printf("Records: %i \n", countRecords(f_msgList));
这个编译没有任何警告。无论如何,当我运行程序时,countRecords(f_msgList)
的值为0,当文件中包含大量数据时:
5a0203ff 360448
850203ff 393217
110203ff 425986
编辑: 以下是打开或创建文件的代码:
FILE *f_msgList;
f_msgList = fopen("../message_queues.list", "a");
// if file does not exist then create one and check for errors
if (f_msgList == NULL) {
FILE *f_tmp;
f_tmp = fopen("../message_queues.list", "w");
if (f_msgList == NULL) {
fprintf(stderr, "Error occurred while creating the file! \n");
exit(1);
} else
f_msgList = f_tmp;
}
答案 0 :(得分:1)
feof(f_p)
是检查文件指针是否位于文件末尾的最糟糕方式。'r'
以“阅读”模式打开文件。'a+'
重置它。以这种方式阅读文件:
rewind(f_p);
这里整数ret是: