String 混淆了所有不同的字符串类型,以及如何在Visual C++; 几年前,我曾经在C中做过一些基本的编程,现在我试图重新学习我所忘记的东西,同时学习Visual C++。我被所有的字符串选项和现在试图使我的程序与Unicode兼容的额外一层弄糊涂了。我已经开始阅读Visual C++ 2010以及在线阅读来学习这些信息。
作为练习,我正在编写一个非常基本的程序,要求用户输入一些文本,然后以messagebox的形式显示这些文本。这个程序可以运行,但我的工作方式更多的是通过猜测和查看其他示例,而不是真正理解为什么需要将各种字符串转换为不同的类型 代码是:String 混淆了所有不同的字符串类型,以及如何在Visual C++; 几年前,我曾经在C中做过一些基本的编程,现在我试图重新学习我所忘记的东西,同时学习Visual C++。我被所有的字符串选项和现在试图使我的程序与Unicode兼容的额外一层弄糊涂了。我已经开始阅读Visual C++ 2010以及在线阅读来学习这些信息。,string,visual-c++,String,Visual C++,作为练习,我正在编写一个非常基本的程序,要求用户输入一些文本,然后以messagebox的形式显示这些文本。这个程序可以运行,但我的工作方式更多的是通过猜测和查看其他示例,而不是真正理解为什么需要将各种字符串转换为不同的类型 代码是: #include "stdafx.h" #include <iostream> #include <string> #include "Windows.h" using std::wcin; using std::wcout; using
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Windows.h"
using std::wcin;
using std::wcout;
using std::wstring;
int _tmain(int argc, _TCHAR* argv[])
{
wstring myInput;
wcout << "Enter a string: ";
getline(wcin, myInput);
MessageBoxW(NULL, myInput.c_str(), _T("Test MessageBox"), 64);
return 0;
}
另一方面,如果我只是使用命令行参数作为messagebox的文本,我根本不需要转换字符串,我也不知道为什么
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Windows.h"
using std::wcout;
int _tmain(int argc, _TCHAR* argv[])
{
MessageBoxW(NULL, argv[1], _T("Test MessageBox"), 64);
return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括“Windows.h”
使用std::wcout;
int _tmain(int argc,_TCHAR*argv[]
{
MessageBoxW(NULL,argv[1],_T(“测试MessageBox”),64);
返回0;
}
我的困惑是:
简短的是,你的主要功能是通过WCHAR *字符串,MasaGeBXW希望WCHAR *字符串。
< P> <强> 1 > <强> > CyStRE()是一个强的>标准> /Stult> C++方法,将C++字符串转换为C字符串。strong>\u tmain、\u T('x')、\u T(“文本”)和_TCHAR是(有点难看)Microsoft宏,使您的程序以unicode或非unicode模式编译。“项目选项”中有一个全局设置,用于设置一些宏,以在这两种模式之一下配置项目 如果处于非unicode模式(在MS文档中称为ANSI模式),宏将扩展为: main,'x','text',char 如果处于unicode模式,宏将扩展为 wmain,L'x',L“text”,wchar\u t 2)和3)Windows标题中充满了typedef和类似的宏。有时,它们会使代码变得更加晦涩难懂。一般来说,LP表示指针(我想是长指针,但我们需要区分近指针和远指针已经有一段时间了),C表示“常量”,T表示它将是char或wchar\T,具体取决于项目设置,STR显然是“字符串”。毕竟,这是一个普通的C型,这就是为什么你可以通过C字符串而不转换的方式。 < P> <强> 1 > <强>。CyStRE()是一个强的>标准> /Stult> C++方法,将C++字符串转换为C字符串。strong>\u tmain、\u T('x')、\u T(“文本”)和_TCHAR是(有点难看)Microsoft宏,使您的程序以unicode或非unicode模式编译。“项目选项”中有一个全局设置,用于设置一些宏,以在这两种模式之一下配置项目 如果处于非unicode模式(在MS文档中称为ANSI模式),宏将扩展为: main,'x','text',char 如果处于unicode模式,宏将扩展为 wmain,L'x',L“text”,wchar\u t2)和3)Windows标题中充满了typedef和类似的宏。有时,它们会使代码变得更加晦涩难懂。一般来说,LP表示指针(我想是长指针,但我们需要区分近指针和远指针已经有一段时间了),C表示“常量”,T表示它将是char或wchar\T,具体取决于项目设置,STR显然是“字符串”。毕竟,它是一种普通的C类型,这就是为什么您可以将C字符串传递给它们而无需转换。请看一看,谢谢!那真是帮了大忙,看一看谢谢!这确实很有帮助,但是通过创建wstring变量,这已经是一个宽字符串了吗?那么为什么我需要使用c_str()函数呢?但是通过创建wstring变量,这已经是一个宽字符串了吗?那么为什么我需要使用c_str()函数呢?
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Windows.h"
using std::wcout;
int _tmain(int argc, _TCHAR* argv[])
{
MessageBoxW(NULL, argv[1], _T("Test MessageBox"), 64);
return 0;
}