创建的文件中没有任何内容

标签 c arrays struct fwrite

所以我想让我的程序在打开和关闭时保持持久性我假设我必须用一个文件来做到这一点,该程序是一个使用结构的薪资程序。这里有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/

相关文章:

c# - 在 C# 中,数组或列表是通过引用默认传递的吗?

javascript - 仅合并重复出现的重复对象

c - malloc 结构指针数组与结构数组

c - 正则表达式:在两个字符串之间提取与特定单词匹配的文本

c - sscanf 没有检测到零

arrays - 使用 Swift 排序数组错误

c - 如何正确定义全局结构变量?

struct - Julia 可变结构中的变量字段名

c++ - 该递归函数如何工作?

创建通用循环缓冲区