指向自由char*是正确的吗?
Is this correct point to free char*
我有这样的代码
{
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也可能不接受这些字符。看到这个。