将3D数组保存到文件的问题

时间:2018-05-02 18:22:59

标签: c

对于课程我已经制作了一个国际象棋游戏,我试图将当前的棋盘状态保存为csv文件。

我使用以下代码:

    mkdir("saves");
FILE *fp1 = fopen_s(&fp1, "saves/board.csv", "wb");  //create a file
if (fp1 == NULL)
{
    printf("Error while opening the file.\n");
    perror("Error: ");
    return 0;
}

fwrite(board, sizeof(char), sizeof(board), fp1);
fclose(fp1);

但它在fp1 == null上出错了。 perror打印出“文件存在”,它不会再进一步​​了。它会创建文件(因此,如果我将board.csv更改为将创建该文件的其他内容),但不会保存任何数据。我不明白为什么文件存在导致它出错,因为它确实知道它只是创建了它来写?

董事会像董事会一样[8] [8] [2]。

对此的任何帮助都会很棒:)

2 个答案:

答案 0 :(得分:0)

如果成功,

fopen_s将返回0。所以你的代码:

FILE *fp1 = fopen_s(&fp1, "saves/board.csv", "wb");  //create a file
if (fp1 == NULL) {
    printf("Error while opening the file.\n");

错误的是,在成功时它会将值fp1覆盖为零并打印出

  

打开文件时出错。

而是尝试

FILE *fp1 = NULL;
errno_t ret = fopen_s(&fp1, "saves/board.csv", "wb");
if (!ret) {

答案 1 :(得分:0)

您错误地使用了fopen_s功能。该函数声明为:

errno_t fopen_s(   
   FILE** pFile,  
   const char *filename,  
   const char *mode   
);  

您将返回值(错误代码)分配给文件描述符。假设函数成功返回,返回值为0.将此值赋给指针时,它与赋值NULL相同。

您应该只检查返回值而不将其分配给fp1

FILE *fp1;
if (fopen_s(&fp1, "saves/board.csv", "wb"))
{
    ...