【问题标题】:fscanf inside a loop循环内的 fscanf
【发布时间】:2011-03-24 01:33:08
【问题描述】:

啊,谢谢!说得通。刚刚制作了大小为 MAX_COMMAND_LENGTH + 1 的命令。

我正在尝试使用 fscanf 在循环中读取同一个文件 2 次不同的时间,但我遇到了 seg 错误。这个想法是文件将被格式化,以便它在每行的开头都有一个命令,然后是命令的参数。

  char* command;  //Changed to char command[MAX_COMMAND_LENGTH + 1]

  while(fscanf(file, "%s", command) == 1)
  {
    if (strcmp("CMD1", command) == 0)
    {    
      int index, exp, coeff;
      fscanf(file, "%d %d %d", &index, &exp, &coeff);
    }
    else if (strcmp("CMD2", command) == 0)
    {
      int num;
      fscanf(file, "%d", &num);
    }
}

【问题讨论】:

  • 你为什么要读两次文件?

标签: c scanf


【解决方案1】:

您需要为command 分配内存。例如:

command = (char *)malloc(1024 * sizeof(char));

将为 1024 个字符分配足够的内存。

完成后记得free(command)

【讨论】:

    【解决方案2】:

    您需要分配一些存储空间并将其存储在“命令”中。您要求 fscanf 通过未初始化的指针进行写入。

    【讨论】:

      【解决方案3】:

      现在你只有一个指针。您需要分配一些空间来保存您读取的字符串:

      char command[256];
      
      if (fscanf(file "%256s", command)==1)
          // ...
      

      【讨论】:

        【解决方案4】:

        您应该分配一个缓冲区来读取命令。目前command 没有被初始化,它指向和无效的地址。因此,要么您为命令“malloc()”内存,要么将命令声明为数组 (char command[whateversizeyouneed])

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-07
          • 1970-01-01
          • 2014-09-09
          • 2014-12-02
          • 1970-01-01
          • 1970-01-01
          • 2013-03-25
          • 2021-04-05
          相关资源
          最近更新 更多