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个字符。。
大家给看看。
{
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个字符。。
大家给看看。
=>
strncpy(pszDataBuf,pszBuf,strlen(pszBuf));
字符串必须以'\0'结束
strData.TrimLeft();
strData.TrimRight();
strData = strData.Left(30);
AfxMessageBox(strData);
技术上可行
符合你的要求吗?
如果不明白
请给我发短消息
请附: 帖子的地址
或根据http://www.vcshare.net上的联系方式与我联系
---------------
欢迎访问我的个人论坛http://www.vcshare.net/bbs
{
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发过来的字符串,我跟踪串正确呀,,就是截取,,用的是跟这一样的,子
函数,,但是还是出错呀,怎么会事???
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;
}
{
char *aa; ...//通过aa转换 return aa;
}
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如果不能重新赋值了,,是什么原因造成的呀。
最后一个字符应为'\0'不然肯定出问题。
同时写程序时要多注意使用const型变量,随便修改参数值的习惯很不好。