如下一个函数
CString CToolLibrary::RestoreCode(char *pDesString)
{
int iLength;
char szBuffer[10];
int iAsscValue; char szString[1024];
ZeroMemory(szString,1024); int iPos = 0; while(pDesString)
{
ZeroMemory(szBuffer,10);
iLength = pDesString[0]-'0';

pDesString++;
strncpy(szBuffer,pDesString,iLength);
iAsscValue = atoi(szBuffer);
szString[iPos] = iAsscValue;
iPos++;

for (int i=0; i< iLength; i++)
{
pDesString++;
}
           AfxMessageBox(szString);//这里可以显示程序一切运行都正常,szString的值也都是正确的
}
         AfxMessageBox(szString);//这一句却得不到执行!整个程序也就在这里退出了。莫名其妙,没有提示任何错误,程序就无声无息地退出了,我要晕了 CString szResult = szString;

return szResult;
}

解决方案 »

  1.   

    可以肯定是函数里出的问题因为我把函数改成
    CString CToolLibrary::RestoreCode(char *pDesString)
    { CString szResult = "szString";

    return szResult;
    }然后整个程序都正常了
    没有再莫名其妙地退出。
      

  2.   

    我明白是哪里出问题了
    循环的判断条件是while(pDesString)而下面指针的移动
    pDesString++;这样其实指针即使移动到pDesString尾部也不会满足while(pDesString)
    因为指针可以一直指下去
    FAINT
      

  3.   

    我认为是这个ZeroMemory(szBuffer,10);有问题。
    你再查一下。
    你的代码不全,我并不能确定。
      

  4.   

    to hailong0108(汤姆):
    问题已经解决了
    原因我在上面说了下面是我改正后的代码CString CToolLibrary::RestoreCode(char *pDesString)
    {
    int iLength;
    char szBuffer[10];
    int iAsscValue; char szString[1024];
    ZeroMemory(szString,1024); int iPos = 0; int iStrLen = strlen(pDesString);
    int iPostion=0; while(iPostion < iStrLen)
    {
    ZeroMemory(szBuffer,10);
    iLength = pDesString[0]-'0';

    pDesString++;
    iPostion++;
    strncpy(szBuffer,pDesString,iLength);
    iAsscValue = atoi(szBuffer);
    szString[iPos] = iAsscValue;
    iPos++;

    for (int i=0; i< iLength; i++)
    {
    pDesString++;
    iPostion++;
    }

    } CString szResult = szString;

    return szResult;
    }