char* CMy2Dlg::AllTrim(char *pszStr)
{
if (pszStr == NULL )
{
ASSERT(FALSE);
return NULL;
}
    int i = 0 ;
    while(pszStr[i] == ' ') i++;
    if(i > 0)   strcpy(pszStr ,pszStr+i);
    i = (int)strlen(pszStr) ;
    while(i > 0 && pszStr[--i] == ' ')
pszStr[i] = 0 ;
return pszStr;
}
void CMy2Dlg::GetDataField(char *pszBuf,  char *pszDataBuf, int nSize)
{
if (pszBuf == NULL || pszDataBuf == NULL || nSize <= 0) return ;
memset(pszDataBuf,'\0',nSize);
AllTrim(pszBuf);
strncpy(pszDataBuf,pszBuf,nSize);
return ;
}
void CMy2Dlg::OnOK() 
{
// TODO: Add extra validation here
    char pbuf[40]="10042004560215                      11 ";
char pdatabuf[31]="";
GetDataField(pbuf,pdatabuf,sizeof(pdatabuf));
GetDataField(pbuf,pdatabuf,sizeof(pdatabuf));
AfxMessageBox(pdatabuf);
CDialog::OnOK();
}这是一个测试程序,,为什么截取的不对呀。。是要截取前30个字符。。
大家给看看。

解决方案 »

  1.   

    strncpy(pszDataBuf,pszBuf,nSize);
    =>
    strncpy(pszDataBuf,pszBuf,strlen(pszBuf));
      

  2.   

    pdatabuf[30] = '\0';
    字符串必须以'\0'结束
      

  3.   

    CString strData = pbuf;
    strData.TrimLeft();
    strData.TrimRight();
    strData = strData.Left(30);
    AfxMessageBox(strData);
    技术上可行
    符合你的要求吗?
    如果不明白
    请给我发短消息
    请附: 帖子的地址
    或根据http://www.vcshare.net上的联系方式与我联系
    ---------------
    欢迎访问我的个人论坛http://www.vcshare.net/bbs 
      

  4.   

    你的AllTrim(char *pszStr)函数处理的有问题,应是没有达到你的要求
      

  5.   

    void CMy2Dlg::GetDataField(char *pszBuf,  char *pszDataBuf, int nSize)
    {
    if (pszBuf == NULL || pszDataBuf == NULL || nSize <= 0) return ;
    memset(pszDataBuf,'\0',nSize);
    AllTrim(pszBuf);
    strncpy(pszDataBuf,pszBuf,nSize);
              pszDataBuf[nSize-1]='\0';
    return ;
    }
    我在这里面加了pszDataBuf[nSize-1]='\0';测试正确,,,但是放到我的程序里,,还是同样的问题
    没有截取我的程序是socket发过来的字符串,我跟踪串正确呀,,就是截取,,用的是跟这一样的,子
    函数,,但是还是出错呀,怎么会事???
      

  6.   

    改为
    char* CDddddDlg::AllTrim(char *pszStr)
    {
    char qq[100];
    if (pszStr == NULL )
    {
    ASSERT(FALSE);
    return NULL;
    }
        int i = 0 ;
        while(pszStr[i] == ' ') i++;
        if(i > 0)   strcpy(pszStr ,pszStr+i);
        i = (int)strlen(pszStr) ;
    int j  = 0;
    for (int k = 0; k < i; k++)
    {
    if (pszStr[k] != ' ')
    {
    qq[j]= pszStr[k];
    j++;
    }
    }
    qq[j] = '\0';
    memset(pszStr, 0, sizeof(pszStr));
    strncpy(pszStr, qq, j+1);
    return pszStr;
    }
      

  7.   

    char* CMy2Dlg::AllTrim(char *pszStr)
    {
    char *aa; ...//通过aa转换 return aa;
    }
      

  8.   

    程序里面的变量不能重新赋值是怎么会事呀。。这个变量是结构体里的变量,
    struct acc
    {
    char str1[11];
    char str2[6];
    char str3[16];
    };
    /////////////
    char pbuf[500]="10042004560215    gfgfgfgfggfgfgf                  11 ";
    char pdatabuf[6]="";
    acc *ac=(acc*)pbuf;
    GetDataField(ac->str1,pdatabuf,sizeof(pdatabuf));
    里面的ac->str1如果不能重新赋值了,,是什么原因造成的呀。
      

  9.   

    char pbuf[40]="10042004560215                      11 ";
    最后一个字符应为'\0'不然肯定出问题。
    同时写程序时要多注意使用const型变量,随便修改参数值的习惯很不好。