【问题标题】:C++ wchar_t* not workingC++ wchar_t* 不工作
【发布时间】:2014-07-09 07:15:53
【问题描述】:
    wchar_t* Pfad;
    wcin >> Pfad;

wchar_t* file = Pfad + "*.quiz";

不适合我,我怎样才能使它工作? 它说"*.quiz" 是错误的,它必须是一个数值或类似的东西。

抱歉,我是 C++ 新手...

我的实际问题是,我使用这个,但我想用户选择路径

类似 cin >> 文件的东西

但我不希望用户必须输入“*.quiz”;

wchar_t* file = L"C:/Users/Niku/Documents/Visual Studio 2012/Projects/Quiz/Quiz/Fragen_Niko/*.quiz"; 
WIN32_FIND_DATA FindFileData;
 HANDLE hFind;
hFind = FindFirstFile(file, &FindFileData); 

if( hFind != INVALID_HANDLE_VALUE ) {
max++;
while ((x = FindNextFile(hFind, &FindFileData)) == TRUE)
max++;
}

如果我使用除了 wchar_t* 之外的任何其他东西,它就不起作用..

【问题讨论】:

  • 您还没有准备好,请改用std::wstring
  • 此外,宽字符串文字以 L 为前缀,如下所示:L"*.quiz"
  • 显然不是书籍列表的副本。愚蠢的人。
  • 简短回答:添加两个指针(Pfad"*.quiz")不会产生任何有用的东西。您需要使用连接函数来连接这些指针引用的字符串,或者您需要一个覆盖+ 的类来提供连接(前面提到的wstring)。

标签: c++ visual-c++ wchar-t wchar


【解决方案1】:

它没有按照您期望的方式工作,因为您不完全理解 C++ 中的 指针 和字符串文字。如果你想知道哪里出了问题,请pick any of these books(可能是初学者)。

如果您想直接解决此问题(走捷径),请改用std::wstring

std::wstring Pfad;
std::wcin >> Pfad;
auto file = Pfad + L"*.quiz";

Live demo

正如Rook 所建议的,如果你必须传递一个指向C API 的指针,你可以使用成员函数std::wstring::c_str,它会返回一个const wchar_t* 供你使用。

【讨论】:

  • 你也应该提到.c_str()。它需要提供给 OP 中的那些 winapi 函数。
  • 谢谢,但问题是,如果我在“hFind = FindFirstFile(file, &FindFileData);”行中使用 wstring我收到一个错误“文件 - 错误:std::wstring 到 LPCWSTR”
  • @user3566608,试试hFind = FindFirstFile(file.c_str(), &FindFileData);
  • 谢谢!错误消失了,但是如果我输入路径“C:/Users/Niku/Documents/Visual Studio 2012/Projects/Quiz/Quiz/Fragen_Niko/”,它就不起作用。它用我的旧代码显示“有 0 个文件”。也许是因为空白 (/Visual Studio 2012/) ?抱歉问,但你知道我怎么能做到这一点吗?不过,谢谢你,你帮了我很多!
猜你喜欢
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 2021-11-21
  • 2017-04-05
  • 2017-02-18
  • 1970-01-01
相关资源
最近更新 更多