C++ 将fopen()与绝对路径指针一起使用

C++ 将fopen()与绝对路径指针一起使用,c++,pointers,fopen,C++,Pointers,Fopen,我正试图读取一个用户给定的文件。 这就是我获得这条路径的方式: const char* WavRead::getFilePath(){ std::string input; std::cout << "Input wave file name: "; std::cin >> input; std::cin.get(); filePath = input.c_str(); return filePath; } 最后,我尝试打开一个具有给定绝对路径的

我正试图读取一个用户给定的文件。 这就是我获得这条路径的方式:

const char* WavRead::getFilePath(){
  std::string input;
  std::cout << "Input wave file name: ";
  std::cin >> input;
  std::cin.get();
  filePath = input.c_str();
  return filePath;
}
最后,我尝试打开一个具有给定绝对路径的文件(例如D:\daisy.wav)

但这不起作用。文件未加载,cosnole向我显示以下答案:


“无法打开wave文件:!”

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

请考虑返回字符串:

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

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

input
是一个具有作用域的自动变量,将其生存期限定为函数的作用域。因此,指向它或其成员之一的每个指针也将超出范围。
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;
}
std::string WavRead::getFilePath(){
  std::string input;
  ...
  return input;
}