5

我有一个 TCHAR 和值如下:

TCHAR          szDestPathRoot[MAX_PATH]="String This";

现在我想要 TCHAR 的第一个三个字符,如下所示:

szDestPathRoot.substring(0,2);

我怎样才能做到这一点。

4

4 回答 4

13

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

TCHAR[](根据定义)可以是宽字符串 (Unicode) 或简单字符字符串 (ASCII)。这意味着每个字符串函数(vswcs等)都有等效项。和一个不可知的编译时等价物,可以是非此即彼。strwcslen()strlen()TCHAR

TCHAR等价物strncpy()tcsncpy()

最后警告:要声明TCHAR文字,最好使用_T()宏,如以下代码段所示:

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

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

于 2010-10-28T05:40:30.350 回答
4
TCHAR szDestPathRoot[MAX_PATH]="String This";
TCHAR substringValue[4] = {0};
memcpy(substringValue, szDestPathRoot, sizeof(TCHAR) * 3);
于 2010-10-28T04:52:32.193 回答
1

这有点难看,但如果您确定:

  1. 该字符串至少包含 4 个 TCHAR(3 个字符加上终止的 NUL)
  2. 可以修改字符串的内容(在您的示例中就是这种情况)。
  3. 您不必保持原始字符串不变

您可以在第 4 个位置放置一个终止 NUL 以使字符串长度为 3 个字符。

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

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

不过,您确实应该在 C++ 代码中使用字符串类。

于 2010-10-28T04:48:49.877 回答
1

当您使用“C++”标记您的问题时,您可以使用 std 库的字符串类:

std::wstring strDestPathRoot( _T("String This") );
strDestPathRoot.substr( 0, 2 );
于 2010-10-28T07:14:13.337 回答