#include<iostream>
#include"comutil.h"
#include   <atlbase.h> #pragma comment( lib, "comsupp.lib" )using namespace std;
int main(){
         char *a="hello";
cout<<a<<endl;
CComBSTR b=_com_util::ConvertStringToBSTR(a);
char *ch=(char*)(_com_util::ConvertBSTRToString(b.m_str));
         cout<<ch<<endl;
if(ch==a)
cout<<"OK\n";
}
为什么不打印出OK?   ch和a的字符串内容是相同的啊。

解决方案 »

  1.   

    char *a;
    char *ch;你比较2个指针,这两个指针肯定不相等的。if (::strcmp(a, ch) == 0)
      

  2.   

    比较字符串内容是否一样 lstrcmp/lstrcmpi
      

  3.   

    #include <iostream>
    #include"comutil.h"
    #include  <atlbase.h>
    #pragma comment( lib, "comsupp.lib" )
    using namespace std;
    int main()
    {
     char *a="hello";
    cout < <a < <endl;
    wchar * wb=_com_util::ConvertStringToBSTR(a);
    CComBSTR b=wb;
    ::SysFreeString(wb);//需要释放内存
    char *ch=(char*)(_com_util::ConvertBSTRToString(b.m_str));
            cout < <ch < <endl;
    if(ch==a)
    cout < <"OK\n";
    delete []ch;//需要释放内存

    看到以上楼主就明白为什么地址不一样了,实际上两个函数都申请了新的内存,和以前的指针无关,所以你必须释放,释放函数不同,请看MSDN关于函数的说明。