指向自由char*是正确的吗?

Is this correct point to free char*

本文关键字:自由 char      更新时间:2023-10-16

我有这样的代码

{
 char *filename = createFilename(file, extension);
 ...
 ...
 delete[] filename;
}
inline char *DataSet::createFilename(LPCSTR file, LPCSTR extension)
{
  char *path = new char[strlen(file) + strlen(extension) + 1];
  strcpy(path, file);
  strcat(path, extension);
  return path;
}

在main函数中删除"filename"是否正确?我在删除时得到ERROR_INVALID_NAME。我检查了文件名,是正确的。

我知道我应该使用std::string,但这是现有的代码。请帮助

如果它是现有的代码,你不能改变createFilename返回一个std::string,那么如何改变调用站点使用std::unique_ptr。它专门用于数组,比自己执行delete操作要安全得多。看看这个答案。

类型为ERROR_INVALID_NAME的错误通常发生在目录名、文件名或卷标不正确时。在Windows上,您可能需要注意转义序列。例如,如果文件的路径为C:Folder file。ext应该使用字符串C:\Folder File.ext。另外,即使Windows允许在文件和目录名中使用某些字符,您正在使用的API也可能不接受这些字符。看到这个。