对于课程我已经制作了一个国际象棋游戏,我试图将当前的棋盘状态保存为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]。
对此的任何帮助都会很棒:)
答案 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"))
{
...