【问题标题】:Status access violation when reading from file C从文件 C 读取时状态访问冲突
【发布时间】:2014-04-12 02:54:03
【问题描述】:

问题是我试图读取一些整数以了解我已经通过的游戏关卡,然后如果 t 还没有,我想将当前关卡的整数设置为 1。它创建文件但不写任何东西。有谁知道为什么?? - 第一次使用 printf 创建它时会这样做,但在读取它时会出现状态访问冲突

void SaveGame(void)
{
  FILE *pFile = fopen("SavedData.txt","rb");
  int MyArray[8] = {0};

  if(pFile)
  {
    fscanf(pFile, "%d %d %d %d %d %d %d %d" , MyArray[0], MyArray[1], MyArray[2], MyArray[3], MyArray[4], MyArray[5], MyArray[6], MyArray[7]);
    fclose(pFile);
  }

  if(MyArray[Current] == 0)
    MyArray[Current] = 1;

  pFile = fopen("SavedData.txt", "wb");

  if(pFile)
  {
    fprintf(pFile, "%d %d %d %d %d %d %d %d" , MyArray[0], MyArray[1], MyArray[2], MyArray[3], MyArray[4], MyArray[5], MyArray[6], MyArray[7]);
    fclose(pFile);
  }
}

【问题讨论】:

  • 你应该检查第一个fclose(pFile);返回值。
  • MyArray[0] 在scanf 参数中应该是&MyArray[0] 或MyArray+0。其他所有索引也是如此。
  • 您是否要求所有警告?使用-Wall -Wextra。然后正确处理所有警告。许多编译器实际上可以检查各种格式字符串。

标签: c file file-io


【解决方案1】:

MyArray的所有元素都已初始化为0。

通过使用,

fscanf(pFile, "%d %d %d %d %d %d %d %d" , MyArray[0], MyArray[1], MyArray[2], MyArray[3], MyArray[4], MyArray[5], MyArray[6], MyArray[7]);

你本质上是在召唤,

fscanf(pFile, "%d %d %d %d %d %d %d %d" , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

将该行更改为:

fscanf(pFile, "%d %d %d %d %d %d %d %d" , &MyArray[0], &MyArray[1], &MyArray[2], &MyArray[3], &MyArray[4], &MyArray[5], &MyArray[6], &MyArray[7]);

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多