一个简单的字符串截取问题????

wxpwxp 2004-09-23 02:22:13
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个字符。。
大家给看看。
...全文
173 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gooyan 2004-09-23
  • 打赏
  • 举报
回复
有没有初始化buf
  • 打赏
  • 举报
回复
sizeof(pdatabuf) 的值为6
wxpwxp 2004-09-23
  • 打赏
  • 举报
回复
呵呵,我是测试呀,,他不能重新赋值,就不能赋'\0'呀,,就不能正常结束呀,,
到底会有什么原因才可能造成这样不能赋值呀。哎,,现在找不到原因。。
brapler 2004-09-23
  • 打赏
  • 举报
回复
char pbuf[40]="10042004560215 11 ";
最后一个字符应为'\0'不然肯定出问题。
同时写程序时要多注意使用const型变量,随便修改参数值的习惯很不好。
wxpwxp 2004-09-23
  • 打赏
  • 举报
回复
程序里面的变量不能重新赋值是怎么会事呀。。这个变量是结构体里的变量,
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如果不能重新赋值了,,是什么原因造成的呀。
Mr-Chen 2004-09-23
  • 打赏
  • 举报
回复
char* CMy2Dlg::AllTrim(char *pszStr)
{
char *aa;

...//通过aa转换

return aa;
}
S_W_A_T 2004-09-23
  • 打赏
  • 举报
回复
好多的猩猩,快跑,,,,,,
MuseIn 2004-09-23
  • 打赏
  • 举报
回复
解决了.
carbon107 2004-09-23
  • 打赏
  • 举报
回复
改为
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;
}
wxpwxp 2004-09-23
  • 打赏
  • 举报
回复
其他的解决方式我知道,我只是想知道为什么这样会出错呀。
wxpwxp 2004-09-23
  • 打赏
  • 举报
回复
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发过来的字符串,我跟踪串正确呀,,就是截取,,用的是跟这一样的,子
函数,,但是还是出错呀,怎么会事???
carbon107 2004-09-23
  • 打赏
  • 举报
回复
你的AllTrim(char *pszStr)函数处理的有问题,应是没有达到你的要求
  • 打赏
  • 举报
回复
CString strData = pbuf;
strData.TrimLeft();
strData.TrimRight();
strData = strData.Left(30);
AfxMessageBox(strData);


技术上可行
符合你的要求吗?
如果不明白
请给我发短消息
请附: 帖子的地址
或根据http://www.vcshare.net上的联系方式与我联系
---------------
欢迎访问我的个人论坛http://www.vcshare.net/bbs
  • 打赏
  • 举报
回复
pdatabuf[30] = '\0';
字符串必须以'\0'结束
  • 打赏
  • 举报
回复
pdatabuf[31];
放不pbuf,
DentistryDoctor 2004-09-23
  • 打赏
  • 举报
回复
strncpy(pszDataBuf,pszBuf,nSize);
=>
strncpy(pszDataBuf,pszBuf,strlen(pszBuf));
wxpwxp 2004-09-23
  • 打赏
  • 举报
回复
截取的变量出现了乱码是怎么会事呀。。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧