所以我想让我的程序在打开和关闭时保持持久性我假设我必须用一个文件来做到这一点,该程序是一个使用结构的薪资程序。这里有2个问题 1.当涉及到这种类型时,二进制文件会更容易吗?我听说 txt 文件很复杂,但不确定为什么。 2. 这是我的代码,它运行时没有错误,但是当我转到文件时,里面什么也没有写。这是我的两个结构
typedef struct{
int day;
int month;
int year;
}DATE;
typedef struct{
char name[100];
int age;
float hrsWorked;
float hrlyWage;
float regPay;
float otPay;
float totalPay;
DATE payDate;
}PAYROLL;
代码
void backUp(PAYROLL employee[], long int *pCounter)
{
FILE *record = fopen_s(&record, "c:\\record.bin", "wb");
if (record != NULL){
fwrite(employee, sizeof(PAYROLL), 1, record);
fclose(record);
}
employee 在它的结构中有一些东西,所以我知道它不是空的,如果有人能解释 fwrite 的参数那会很棒!
最佳答案
您似乎混淆了长期标准的 fopen()
函数与 C11 中新的 fopen_s()
函数的用法。后者返回错误代码,而不是流指针。您正在使用该错误代码覆盖它通过第一个参数设置的流指针。
如果程序成功打开文件,它返回0
。将其设置为 record
的值后,record
比较等于 NULL
(在 Microsoft 的 C 实现中),因此您甚至不必尝试写。如果您发现了这种情况并打印了诊断结果,那么您就会有线索(尽管是误导性线索)。
你应该这样做:
void backUp(PAYROLL employee[], long int *pCounter)
{
FILE *record;
errno_t result = fopen_s(&record, "c:\\record.bin", "wb");
if (result == 0) {
fwrite(employee, sizeof(PAYROLL), 1, record);
fclose(record);
}
/* ... */
}
关于创建的文件中没有任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29175084/