FindFirstFile LPCSTR

你好,我在这里得到了我的代码的问题。

LPCSTR mergeString(LPCSTR firstString, std::string secondString) { string convertedString = ConvertString(firstString); LPCSTR mergedString; int i = convertedString.size(); convertedString.insert(i, secondString); mergedString = (convertedString.c_str()); return mergedString; } void GetFiles(LPCSTR path) { WIN32_FIND_DATA File_Data; LPCSTR lPath = mergeString(path,"\\*.txt"); FindFirstFile(lPath, &File_Data); wcout << File_Data.cFileName; } 

你传递你想要在GetFiles(LPCSTRpath)中使用的path然后,我使用mergestring函数将path与一个扩展(\ *。txt)合并在一起,除了当它返回LPCSTR时,它只是很多更奇怪的字符,我不知道为什么或者是一个更好的方法来做到这一点?

Solutions Collecting From Web of "FindFirstFile LPCSTR"

你的代码不必要的复杂。 如果你只是想为输入路径字符串添加一个\*.txt后缀,你可以简单地使用std::string和它的重载operator+

然后,如果要将std::string传递给具有const char* (即LPCSTR )参数的Win32 API,则可以使用std::string::c_str()方法:

 void GetFiles(LPCSTR path) { WIN32_FIND_DATA fileData; std::string searchPath(path); searchPath += "\\*.txt"; FindFirstFile(searchPath.c_str(), &fileData); wcout << fileData.cFileName; } 

还要注意,在现代世界中,你应该使用Unicode(UTF-16)进行Win32编程; 所以const wchar_t*std::wstringconst char*std::string更好。 此外,我只是使用一个std::wstring类作为参数,而不是一个原始的wchar_t指针。

 void GetFiles(const std::wstring& path) { std::wstring searchPath = path + L"\\*.txt"; WIN32_FIND_DATA fileData; FindFirstFile(searchPath.c_str(), &fileData); std::wcout << fileData.cFileName; } 

你的GetFiles函数返回一个指向不再有效的内存的指针, File_Data.cFileName只能在GetFiles使用,因为这是File_Data的定义。 最简单的解决方案是使用C ++字符串类std::string

 std::string GetFiles(LPCSTR path) { WIN32_FIND_DATA File_Data; LPCSTR lPath = mergeString(path,"\\*.txt"); FindFirstFile(lPath, &File_Data); return File_Data.cFileName; } 

不必要地使用指针是一个不好的习惯,因为这种原因(还有更多)。

您的mergeString函数也应该用更少的指针重写。

 std::string mergeString(LPCSTR firstString, std::string secondString) { string convertedString = ConvertString(firstString); int i = convertedString.size(); convertedString.insert(i, secondString); return convertedString; }