int CUpLoadClass::ExistItem(const BSTR &item,WORD i)
{
CComBSTR strItem(item);
strItem.ToUpper();
LPTSTR strI=NULL;
wsprintf(strI,_T("%d"),i);
//为了简化问题,这里的循环去掉了
//这里函数调用出错
//当调用CmpItem(strItem,NULL,NULL)时不出错
//后两个参数任意为不NULL,出现错误(ASP组件,ASP环境下错误信息)
//Microsoft VBScript 运行时错误 (0x800A01FB)
//出现一个意外错误:
//各位兄弟姐妹拉我一把
if(CmpItem(strItem,strI,"_ITEM"))
return 1;
else
return 0;
}bool CUpLoadClass::CmpItem(const CComBSTR& item, TCHAR *strI, TCHAR *str)
{
CComBSTR item_name(m_ItemName);//成员变量 CComBSTR m_ItemName;
item_name.ToUpper();
if(str==NULL)
{
if(item == item_name)
return true;
else
return false;
}
else
{
TCHAR *item_i = _tcscat(strI,str);
item_name += str;
if(item==item_i || item==item_name)
return true;
else
return false;
}
}

解决方案 »

  1.   

    LPTSTR strI=NULL;
    wsprintf(strI,_T("%d"),i);
    往0x0000000地址写东西不错才怪. strI需要实例化, 往一个指针(没指向对象)写东西你不觉的危险么?
      

  2.   

    这种情况下我如何实例化呢?
    我原以为这样可以的
    TCHAR *strI;
    wsprintf(strI,_T("%d"),i);//这样居然不可以初始化我现在改成这样
    TCHAR *strI=_T("");//这里指针初始化指在一个常量上吗?
    wsprintf(strI,_T("%d"),i);//这么说来这里指针所指的值改变了
    //如此_T("")不是一个常量字符串了?指针总是容易让人糊涂,谢谢 dfyang 提醒,现在问题少了一些
    这里还有问题
    TCHAR *item_i = _tcscat(strI,str);//无法得到期望的值,期望得到"1_ITEM"
    if(item==item_i) //与item"1_ITEM"比较得false
      

  3.   

    如果声明成指针,则在使用前,是一定要先显式地分配内存的:
    TCHAR *strI
    strI = new TCHAR[128];然后就可以使用了
    wsprintf(strI,_T("%d"),i); 不会自动初始化的声明成
    TCHAR *strI=_T("");
    当然也不能用了,因为它的空间为0,不能放进去任何东西,只要一放东西到里边,是一定要越界的,如果刚好有幸在空的地方,则这种越界你觉察不到,但在一般情况下,都会破坏其后边的内存中的有用数据
      

  4.   

    TCHAR strI[BUFFER_LENGTH];
    wsprintf(strI,_T("%d"),i); 这样应该也可以的