首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FindFirstFile LPCSTR

FindFirstFile LPCSTR
EN

Stack Overflow用户
提问于 2012-11-10 00:21:49
回答 2查看 3.6K关注 0票数 3

你好,我这里的代码有问题。

代码语言:javascript
复制
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中使用的路径( LPCSTR path),然后我使用mergestring函数将带有扩展名(\*.txt)的路径合并在一起,除了它返回LPCSTR之外,一切都正常,然后它只是一大堆奇怪的字符,我不知道为什么,或者这是一个更好的方法来做这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-10 00:52:37

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

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

代码语言:javascript
复制
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指针。

代码语言:javascript
复制
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;
}
票数 5
EN

Stack Overflow用户

发布于 2012-11-10 00:27:31

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

代码语言:javascript
复制
std::string GetFiles(LPCSTR path)
{
    WIN32_FIND_DATA File_Data; 
    LPCSTR lPath = mergeString(path,"\\*.txt");
    FindFirstFile(lPath, &File_Data);
    return File_Data.cFileName;
}

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

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

代码语言:javascript
复制
std::string mergeString(LPCSTR firstString, std::string secondString)
{
    string convertedString = ConvertString(firstString);
    int i = convertedString.size();

    convertedString.insert(i, secondString);
    return convertedString;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13311889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档