C++ 将std::string传递给WriteConsole API
当我编译并链接以下程序时,它不会显示任何问题C++ 将std::string传递给WriteConsole API,c++,winapi,C++,Winapi,当我编译并链接以下程序时,它不会显示任何问题 #include <Windows.h> #include <iostream> int main(int argc, const char* argv) { std::string cMessage = "Native Windows Development.\n"; WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cMessage.c_str(), cMessa
#include <Windows.h>
#include <iostream>
int main(int argc, const char* argv)
{
std::string cMessage = "Native Windows Development.\n";
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cMessage.c_str(), cMessage.size(), NULL, NULL);
return 0;
}
#包括
#包括
int main(int argc,const char*argv)
{
std::string cMessage=“本机Windows开发。\n”;
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),cMessage.c_str(),cMessage.size(),NULL,NULL);
返回0;
}
但当我执行程序时,它只显示了一堆?????在控制台上签名。代码有什么问题?为什么我不能使用std::string而不是const char*?默认情况下,字符集是Unicode的,因此WriteConsole需要一个wchar字符串。你有两个选择 1) 用unicode做任何事情
int main(int argc, const char* argv)
{
std::wstring cMessage = L"Native Windows Development.\n";
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cMessage.c_str(), cMessage.size(), NULL, NULL);
return 0;
}
2) 将默认字符集设置为mbcs默认情况下,字符集为Unicode,因此WriteConsole需要一个wchar字符串。你有两个选择 1) 用unicode做任何事情
int main(int argc, const char* argv)
{
std::wstring cMessage = L"Native Windows Development.\n";
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), cMessage.c_str(), cMessage.size(), NULL, NULL);
return 0;
}
2) 将默认字符集设置为mbcs,
?
输出指示您正在为Unicode编译,其中WriteConsole()
映射到WriteConsoleW()
。由于要写入char
数据,请改用writeconolea()
:
#包括
#包括
int main(int argc,const char*argv)
{
std::string cMessage=“本机Windows开发。\n”;
WriteConsoleA(GetStdHandle(STD_输出_句柄),cMessage.c_str(),cMessage.size(),NULL,NULL);
返回0;
}
输出的?
表明您正在编译Unicode,其中WriteConsole()
映射到WriteConsole()
。由于要写入char
数据,请改用writeconolea()
:
#包括
#包括
int main(int argc,const char*argv)
{
std::string cMessage=“本机Windows开发。\n”;
WriteConsoleA(GetStdHandle(STD_输出_句柄),cMessage.c_str(),cMessage.size(),NULL,NULL);
返回0;
}
尝试将函数名更改为WriteConsoleA
。尝试将函数名更改为WriteConsoleA
。如上所述,还有第三种选择。这就是将字符集更改为mbcs将解决的问题。您的第一种选择是错误的。如果您想“用Unicode做所有事情”,那么入口点的签名是wmain(int argc,wchar_t*argv[])
。正如我前面提到的,还有第三种选择。这就是将字符集更改为mbcs所能做的。您的第一种选择是错误的。如果您想“用Unicode做所有事情”,那么入口点的签名是wmain(int argc,wchar\u t*argv[])
。