Visual Studio 2008 C+中灵活的字符串处理+; 我慢慢地开始在Visual Studio 2008 C++中获得这些东西的挂起,但是有几件事仍然困扰着我。我可以看到灵活性的好处,但如果我不能很快掌握基本知识,我想我会回到标准的方法来做这件事——更不用说混乱了

Visual Studio 2008 C+中灵活的字符串处理+; 我慢慢地开始在Visual Studio 2008 C++中获得这些东西的挂起,但是有几件事仍然困扰着我。我可以看到灵活性的好处,但如果我不能很快掌握基本知识,我想我会回到标准的方法来做这件事——更不用说混乱了,c++,visual-studio-2008,visual-c++,unicode,tchar,C++,Visual Studio 2008,Visual C++,Unicode,Tchar,下面代码的思想是扫描参数-d,然后将其后的文本存储在字符串变量fileDir中。它还忽略任何其他参数 感谢您的帮助 //Console application Parameters::Parameters(int argc, _TCHAR* argv[]) { _Tstring fileDir; // Is there some kind of _t variable to use here for a string? for (int i = 0; i < arg

下面代码的思想是扫描参数-d,然后将其后的文本存储在字符串变量fileDir中。它还忽略任何其他参数

感谢您的帮助

//Console application
Parameters::Parameters(int argc, _TCHAR* argv[]) 
{ 
    _Tstring fileDir;  // Is there some kind of _t variable to use here for a string?

    for (int i = 0; i < argc; i = i + 1)
    {           
        if (_tccmp(argv[i], _T("-d")) == 0)  // this appeared to accept anything starting with -
        {           
            i = i + 1;
            fileDir = argv[i]
        }
    }   

    _tprintf("Parameter value found: %s\n", fileDir);
} 
//控制台应用程序
参数::参数(int argc,_TCHAR*argv[])
{ 
_Tstring fileDir;//这里是否有某种\ t变量用于字符串?
对于(int i=0;i
您可以使用
\u tstring
TCHAR
参数表示和
std::string
。另外,函数的名称是
\u tcscmp
,而不是
\u tccmp
,因此我不知道该代码段是如何编译的

老实说,我不想为这些烦恼。当人们编写在Windows9x(内部为Ansi)和WindowsNT(内部为Unicode)之间可移植的代码时,整个
TCHAR
的东西很有用。现在,使用宏几乎没有什么好处


如果您想做任何事情,可以完全切换到
wchar\t
。这意味着在字符串文本前面加上“L”,如
L“Some wide char string”
中,并使用函数的“w”版本(例如
std::wstring
wcscmp
等)。但是,在许多情况下,即使这样做也可能被认为是矫枉过正。

您可以使用
\u tstring
来表示和
std::string
,并使用
TCHAR
参数。另外,函数的名称是
\u tcscmp
,而不是
\u tccmp
,因此我不知道该代码段是如何编译的

老实说,我不想为这些烦恼。当人们编写在Windows9x(内部为Ansi)和WindowsNT(内部为Unicode)之间可移植的代码时,整个
TCHAR
的东西很有用。现在,使用宏几乎没有什么好处


如果您想做任何事情,可以完全切换到
wchar\t
。这意味着在字符串文本前面加上“L”,如
L“Some wide char string”
中,并使用函数的“w”版本(例如
std::wstring
wcscmp
等)。但即使在许多情况下,这也可能被认为是过火了。

如果要复制字符串值,并且使用MFC或ATL,则可以使用CString

如果要复制指针值,则_t字符串可以是LPTCSTR。(无论您是否使用MFC或ATL,这都有效。)

正如codeka所说,您的tccmp需要是tcscmp。如果您使用的是MFC或ATL,另一种方法是CString的比较方法


您没有显示调用方如何将参数argv传递给构造函数。如果argv来自_tmain函数,请确保_tmain的参数正确。

如果要复制字符串值并且正在使用MFC或ATL,则可以使用CString

如果要复制指针值,则_t字符串可以是LPTCSTR。(无论您是否使用MFC或ATL,这都有效。)

正如codeka所说,您的tccmp需要是tcscmp。如果您使用的是MFC或ATL,另一种方法是CString的比较方法


您没有显示调用方如何将参数argv传递给构造函数。如果argv来自您的_tmain函数,请确保_tmain的参数正确。

我会争论TCHAR,人们可能希望编写跨平台应用程序。TCHAR无论如何都不能移植到任何其他平台(您必须自己在其他平台上重新编写所有宏)。如果你想成为跨平台的,我会在内部坚持UTF-8编码。或者使用一些跨平台库(如Qt等),我会讨论TCHAR,人们可能希望编写跨平台应用程序。TCHAR无论如何都不能移植到任何其他平台(您必须自己在其他平台上重新编写所有宏)。如果你想成为跨平台的,我会在内部坚持UTF-8编码。或者使用一些跨平台库(如Qt等)