5

以下のような TCHAR と値があります。

TCHAR          szDestPathRoot[MAX_PATH]="String This";

以下のように、 TCHAR の最初の 3 文字が必要です。

szDestPathRoot.substring(0,2);

これどうやってするの。

4

4 に答える 4

13

TCHAR[](C ++クラスではなく)単純なnullで終了する配列です。その結果、「。substring()」メソッドはありません。

TCHAR[](定義上)ワイド文字列(Unicode)または単純な文字列(ASCII)のいずれかです。これは、各文字列関数(vsなど)にwcs同等のものがあることを意味します。そして、どちらかまたは両方である可能性のある、不可知論的なコンパイル時の同等物。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

質問に「C++」のタグを付けたので、std ライブラリの文字列クラスを使用できます。

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

これはやや醜いですが、次のことが確実にわかっている場合:

  1. 文字列は、少なくとも 4 つの TCHAR (3 文字と終端の NUL) を保持します。
  2. 文字列の内容は変更できます(これはあなたの例の場合です)。
  3. 元の文字列をそのままにしておく必要はありません

文字列を 3 文字の長さにするには、4 番目の位置に終了 NUL を配置するだけです。

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

この操作は元の文字列を破壊することに注意してください

ただし、実際には C++ コードで文字列クラスを使用する必要があります。

于 2010-10-28T04:48:49.877 に答える