文字列の部分検索 – プログラミング – Home

通知
すべてクリア

[解決済] 文字列の部分検索


tubaru
 tubaru
(@tubaru)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

開発環境:Windows XP VC++.net 2003 非MFC

XMLから取り出した要素に、入力した文字が含まれているか検索し、
含まれている場合は取り出した要素をリストボックスに表示するプログラム
をつくっています。
現在のソースは以下のようなものです。

for(i=0; i<n; i++){
if(strstr(node[i].bstrVal,szBuf)!=NULL)     ListBox_AddString
(hList1,(_bstr_t)node[i].bstrVal);
}

node[i]にはXMLから取得した要素、szBufには入力した文字が格納されていることは
確認できました。
「オーバーロードのどれも、すべての引数の型を変換できませんでした」というエラー
が表示されるのですが、どのように変更したらよいのでしょうか??


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>strstr
は BSTR 用ではありません。
wcsstrを使ってください。
(もしくは _bstr_t を介して渡す。strstr(_bstr_t(node[i].bstrVal),szBuf)!=、、、)

また、同様に strcpy や sprintf 等の関数も BSTR 用でありません。
ヘルプを確認して、UNICODEに対応する関数を使うようにしてください。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

あ、いい忘れましが、
wcsstrを使う場合
>szBuf
は wchar_t型配列として宣言してください。

wchar_t szBuf[] = L検索文字列

のように。
もしくは、こちら側を_bstr_tを介すとか。

○szBuf が char型配列である場合
>if(strstr(node[i].bstrVal,szBuf)!=NULL)

if(wcsstr(node[i].bstrVal,_bstr_t(szBuf))!=NULL)

_bstr_tを介すパターンは全て文字コード変換が加わるので
速度的にも落ちるし、Shift_JISに変換できないUnicode文字列もあるという点で
なるべく使わないほうがよいでしょう。

よって
>ListBox_AddString
もあまり好ましくないです。


返信引用
tubaru
 tubaru
(@tubaru)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

_bstr_tを介すことで問題を解決することができました。
ヘルプやネットなどを使ってUNICODEに対応する関数、BSTRについてもうすこし
勉強していきたいと思います。
Blueさんありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました