VS错误C++:不存在从 "WCHAR [260]" 转换到 "std::basic_string<char," 的适当构造函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS错误C++:不存在从 "WCHAR [260]" 转换到 "std::basic_string<char," 的适当构造函数相关的知识,希望对你有一定的参考价值。
代码如下,展开更方便看,vc6下可以正常运行,但vs报错,求大佬指点,谢谢
#include <iostream>
#include <string>
#include <map>
#include <windows.h>
#include <TlHelp32.h>
using namespace std;
bool traverseProcesses(std::map<std::string, int>& _nameID)
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
std::cout << "CreateToolhelp32Snapshot Error!" << std::endl;;
return false;
BOOL bResult = Process32First(hProcessSnap, &pe32);
int num(0);
while (bResult)
std::string name = pe32.szExeFile;
int id = pe32.th32ProcessID;
std::cout << "[" << ++num << "] : " << "Process Name:"
<< name << " " << "ProcessID:" << id << std::endl;
_nameID.insert(std::pair<string, int>(name, id)); //字典存储
bResult = Process32Next(hProcessSnap, &pe32);
CloseHandle(hProcessSnap);
return true;
int main()
std::map<std::string, int> _nameID;
if (!traverseProcesses(_nameID))
cout << "Start Process Error!" << endl;
return 0;
您好,代码中没有w啊,可以具体到哪行代码吗
追答你是刚学编程吧?我说的是改成CHAR
你的编译选项设置了unicode,改成多字节编码什么都不用改
我说的是_nameID变量的类型
看了下其他的代码,如果这样改的话,很多地方还要改
改为多字节编码,是最简单的
追问哦哦,好的,谢谢您
本回答被提问者和网友采纳c++中wchar转char
【中文标题】c++中wchar转char【英文标题】:wchar to char in c++ 【发布时间】:2010-05-24 13:07:57 【问题描述】:我有一个 Windows CE 控制台应用程序,其入口点如下所示
int _tmain(int argc, _TCHAR* argv[])
我想检查argv[1]
的内容,将"-s"
转换为整数argv[2]
。我无法缩小论点或访问它们进行测试。
我最初尝试了以下但收效甚微
if (argv[1] == L"-s")
我还尝试在每个字符上使用wostringstream
的narrow
函数,但这会使应用程序崩溃。
谁能解释一下? 谢谢
【问题讨论】:
【参考方案1】:应该是:
if (_tcscmp(argv[1], _T("-s")) == 0)
【讨论】:
我认为wcscmp
是首选
我改成_tcscmp
,最灵活。【参考方案2】:
if (argv[1] == L"-s")
当您比较指针时,即使对于窄字符串,这也是不正确的。你需要
if(wcscmp(argv[1],L"-s")==0)
或
if(std::wstring(argv[1])==L"-s")
【讨论】:
【参考方案3】:argv
是 char*
的数组,而不是 string
,因此通常与 == 的比较不起作用。该 if 语句正在比较两个指针。你能构造一个wstring
然后比较吗?
if (wstring(argv[1]) == L"-s")
【讨论】:
【参考方案4】:您可能需要将 argv[] 条目转换为字符串,然后进行比较。 [链接文字][1]
http://www.codeproject.com/Tips/81778/Converting-TCHAR-to-string-while-getting-PC-Name.aspx
[1]:
如果您可以转换为字符串,上述链接会有所帮助。
【讨论】:
以上是关于VS错误C++:不存在从 "WCHAR [260]" 转换到 "std::basic_string<char," 的适当构造函数的主要内容,如果未能解决你的问题,请参考以下文章
VS2010的MessageBox不存在从"CString"到"LPCSTR"的适当转换函数该怎么解决?