-PR-
解決
済み

CComBSTR型文字列の

  • すぐに回答を!
  • 質問No.65691
  • 閲覧数384
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 14% (3/21)

こんにちは 目黒@C++学習中です

CComBSTR型の文字列の編集方法について教えて下さい。

既に代入済みのCComBSTR型の文字列を短くする方法がわかりません
以下はテストソースです。

sName = sName.m_str;の行を入れれば取あえず可能ですが
BoundsCheckerでエラーになります。
m_strをfreeしている為。

#スペースがトリムされてしまう、
#トリムを防ぐ方法があったら教えて下さい

#define UNICODE
#define _UNICODE
#include <windows.h>
#include <atlbase.h>
int main(void)
{
CComBSTR sName;

sName = L"012345789\\abc";
long lSize = sName.Length();
WCHAR* sP = ::StrRChr(sName,NULL,L'\\');
if (sP != NULL) {
*sP = 0;
lSize = sName.Length();
// sName = sName.m_str;
}
sName += L"efg";
return EXIT_SUCCESS;
}
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル6

ベストアンサー率 42% (3/7)

CComBSTRは直接編集はできないと思っています。

テストソースでは最終的にsNameが012345789efgになるようにしたいと言うことですよね。たとえば、sName = L"00\\efg"なら結果は"00efg"を期待しているのですね。
BSTRはNULLを突っ込んでも長さは変わりませんよね。
ちょっと助長かもしれませんが、もう一つCComBstrを使って結果を作成するのはいかがでしょうか?
if (sP != NULL) {
 WORD size = sP - sName.m_str;
 CComBSTR Tmp(size,sName);
 sName.Empty();
 sName = Tmp;
 lSize = sName.Length();
}
sName += L"efg";
return EXIT_SUCCESS;
お礼コメント
nakashi

お礼率 14% (3/21)

回答ありがとう

ポインターの演算を避けたいので
下記のようにしました

if (sP != NULL) {
*sP = 0;
CComBSTR sWork = sDirName.m_str;
sDirName = sWork;
}
投稿日時 - 2001-04-23 12:59:20
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ