Tokenize疑问

zhiyong1822 2008-12-23 11:21:08
首先谢谢大家
wwenzi1.ini文件格式为
[1]
1=1 2 3 4
2=22 33 44

int ddd=0;
CString strkey;
LPWSTR tempstr=new TCHAR(100);
::GetPrivateProfileStringW(strid,L"2",L"",(LPWSTR)(LPCTSTR)strkey/*tempstr*/,1024,L"D:\\wwenzi1.ini");
....
/* strkey=tempstr*/
sss[ii]= strkey.Tokenize(_T(" "),ddd);//这句话不能把得到的1 2 3 4 字符串分离出来,设置断点发现 ddd一直返回-1
如果把上面的把注释去掉 即把strkey 换成tempstr ,并把
(LPWSTR)(LPCTSTR) strkey注释掉,就没问题。这两种写法有什么不同。
...全文
502 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sys0007 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhiyong1822 的回复:]
这样是没有问题,我如果strkey=_T("1 2 3")也是没有问题的。如果这个字符串从ini文件中读出来,就不行了。多谢你的热情帮助,你可以建立一个ini 文件,然后去读。看看效果。
[/Quote]

没道理,应该是你没分配内存导致的。
::GetPrivateProfileStringW(strid,L"2",L"",(LPWSTR)(LPCTSTR)strkey.GetBuffer(1024)/*tempstr*/,1024,L"D:\\wwenzi1.ini"); 
strkey.ReleaseBuffer();

应该是没问题的。
zhiyong1822 2008-12-24
  • 打赏
  • 举报
回复
我用你的方法试验了一下,可是还是存在我说的问题。我也想不明白怎么回事。
zhiyong1822 2008-12-23
  • 打赏
  • 举报
回复
这样是没有问题,我如果strkey=_T("1 2 3")也是没有问题的。如果这个字符串从ini文件中读出来,就不行了。多谢你的热情帮助,你可以建立一个ini 文件,然后去读。看看效果。
sys0007 2008-12-23
  • 打赏
  • 举报
回复
使用方法不对:
int nPos=0;
CString strKey = _T("22 33 44");

CString str;
while ( str = strkey.Tokenize(_T(" "), nPos))
{
if (str.IsEmpty())
break;
MessagBox(NULL, str, NULL, MB_OK);
}
zhiyong1822 2008-12-23
  • 打赏
  • 举报
回复
我试验了一下,分配内存,还是不行。ddd还是返回-1。
还有,如果不分配内存,为什么不报错。而且也可以把ini文件中内容正确读出来,就是不能用Tokenize识别中间分隔符
sys0007 2008-12-23
  • 打赏
  • 举报
回复
strkey要分配内存才行。

::GetPrivateProfileStringW(strid,L"2",L"",(LPWSTR)(LPCTSTR)strkey.GetBuffer(1024)/*tempstr*/,1024,L"D:\\wwenzi1.ini"); 
strkey.ReleaseBuffer();

16,466

社区成员

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

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

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