使用带有绝对路径指针的fopen()

时间:2015-12-12 15:03:27

标签: c++ pointers fopen

我试图通过用户aboslute路径读取文件。 这就是我如何获得这条道路:

void WavRead::run(){
  const char* temp_filePath;
  temp_filePath = WavRead::getFilePath();
  WavRead::readFile(temp_filePath);
}

然后我这样传递:

int WavRead::readFile(const char* filePath){
  wav_hdr wavHeader;
  int headerSize = sizeof(wav_hdr);
  FILE* wavFile = fopen(filePath, "r");
  if (wavFile == nullptr){
    fprintf(stderr, "Unable to open wave file: %s\n", filePath);
    return 1;
  }

  size_t bytesRead = fread(&wavHeader, 1, headerSize, wavFile);
  fprintf(stderr, "Header size: %d\n", bytesRead);
  return 0;
}

最后我试图用给定的绝对路径打开一个文件(例如D:\ daisy.wav)

Casper.prototype.evaluate = function evaluate(fn, context) {
    ...
    // function context
    if (arguments.length === 1) {
        return utils.clone(this.page.evaluate(fn));
    } else if (arguments.length === 2) {
        // check for closure signature if it matches context
        if (utils.isObject(context) && eval(fn).length === Object.keys(context).length) {
            context = utils.objectValues(context);
        } else {
            context = [context];
        }
    } else {
        // phantomjs-style signature
        context = [].slice.call(arguments, 1);
    }
    return utils.clone(this.page.evaluate.apply(this.page, [fn].concat(context)));
};

但这不起作用。文件没有加载,cosnole告诉我这个答案:

“无法打开wave文件:!”

1 个答案:

答案 0 :(得分:2)

指针filePath = input.c_str();仅在变量输入存在时有效。从函数返回时,这将变为无效。

请考虑返回字符串:

std::string WavRead::getFilePath(){
  std::string input;
  ...
  return input;
}

并在代码的其余部分使用字符串,除非您绝对需要调用需要char *参数的函数,在这种情况下,您可以使用c_str()安全地提供它。