Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++文件输入输出_C++_Pointers_File Io - Fatal编程技术网

C++文件输入输出

C++文件输入输出,c++,pointers,file-io,C++,Pointers,File Io,我正在尝试使用fgets和sscanf读取文件。在我的文件中,while的每一行上都有字符,我希望将其放入向量中。到目前为止,我有以下几点: FILE *fp; fp = fopen(filename, "r"); if(!fp) { fprintf(stderr, "Unable to open file %s\n", filename); return 0; } // Read file int line_count = 0; char buffe

我正在尝试使用fgets和sscanf读取文件。在我的文件中,while的每一行上都有字符,我希望将其放入向量中。到目前为止,我有以下几点:

FILE *fp;
  fp = fopen(filename, "r");
  if(!fp)
  {
    fprintf(stderr, "Unable to open file %s\n", filename);
    return 0;
  }
  // Read file
  int line_count = 0;
  char buffer[1024];
  while(fgets(buffer, 1023, fp))
  {
    // Increment line counter
    line_count++;

    char *bufferp = buffer;

    ...

    while(*bufferp != '\n')
    {
      char *tmp;
      if(sscanf(bufferp, "%c", tmp) != 1)
      {
        fprintf(stderr, "Syntax error reading axiom on "
                "line %d in file %s\n", line_count, filename);
        return 0;
      }

      axiom.push_back(tmp);
      printf("put %s in axiom vector\n", axiom[axiom.size()-1]);

      // increment buffer pointer
      bufferp++;
    }
  }
我的公理向量定义为向量公理;。当我运行我的程序时,我得到一个seg错误。它发生在我做sscanf的时候。有没有关于我做错了什么的建议?

tmp是指针而不是数组,因此读取它会导致缓冲区溢出

首先,您应将tmp的减速度更改为:

然后,您应该记住在完成时释放axioms中的所有指针。

tmp是指针而不是数组,因此读取它会导致缓冲区溢出

首先,您应将tmp的减速度更改为:


然后,您应该记住在完成后释放axioms中的所有指针。

更安全的方法是使用std::string和std::vector


字符串类型处理文本的内存分配。另请参见getline和std::string::c_str。

更安全的方法是使用std::string和std::vector


字符串类型处理文本的内存分配。请参阅GETLIN和STD::Stry::CyStr.< /P>如果您要采取使用STD::String的步骤,我衷心地建议您这样做,您也可能希望切换到文件I/O的C++ I/O类,即FFLAST。如果您要采取STD::String的步骤,我衷心地推荐您使用。您还可能希望切换到文件I/O的C++ I/O类,即FSRoad。
  char *tmp = malloc(SOME_MAXIMUM_SIZE * sizeof(char));