我怎样才能对TCHAR进行子串

时间:2010-10-28 04:47:55

标签: c++ windows tchar

我有一个TCHAR和值如下:

TCHAR          szDestPathRoot[MAX_PATH]="String This";

现在我想要来自TCHAR的前三个角色,如下所示:

szDestPathRoot.substring(0,2);

我该怎么办呢。

4 个答案:

答案 0 :(得分:12)

TCHAR[]是一个简单的以null结尾的数组(而不是C ++类)。结果,没有“.substring()”方法。

TCHAR[](根据定义)可以是宽字符串(Unicode)或简单字符串(ASCII)。这意味着每个字符串函数(wcs vs str等等)都有wcslen()strlen()个等价物。和不可知的编译时TCHAR等效,可以是/或。

TCHAR等效strncpy()tcsncpy()

最后警告:要声明TCHAR字面值,最好使用_T()字符,如下面的代码段所示:

TCHAR szDestPathRoot[MAX_PATH] = _T("String This");
TCHAR szStrNew[4];
_tcsncpy (str_new, szTestPathRoot, 3);

您可能会发现这些链接很有用:

答案 1 :(得分:3)

TCHAR szDestPathRoot[MAX_PATH]="String This";
TCHAR substringValue[4] = {0};
memcpy(substringValue, szDestPathRoot, sizeof(TCHAR) * 3);

答案 2 :(得分:1)

这有点难看,但如果你确定知道:

  1. 该字符串至少包含4个TCHAR(3个字符加上终止NUL)
  2. 可以修改字符串的内容(在您的示例中就是这种情况)。
  3. 您不必保持原始字符串完整
  4. 您可以将终止NUL放在第4位置,使字符串3 char长。

    szDestPathRoot[3] = _T('\0');
    

    请注意,此操作对原始字符串具有破坏性

    你应该在C ++代码中使用字符串类。

答案 3 :(得分:1)

如果您使用“C ++”标记了问题,则可以使用std库的字符串类:

std::wstring strDestPathRoot( _T("String This") );
strDestPathRoot.substr( 0, 2 );