GetPrivateProfileSection()的问题

icthuang85 2009-11-20 08:43:12

CString userlist = NULL;
CString session=_T("安徽省");
GetPrivateProfileSection(session,(LPWSTR)(LPCTSTR)userlist,1500,_T("d://PROVINCE_CITY.ini"));
CString inttemp = userlist;
int inttemp2 =inttemp.GetLength();


代码如上图所示:
遇到的问题是:
跟进,userlist中有数据:数据为"合肥市1/合肥市2/合肥市3/合肥市4/合肥市5/合肥市6/合肥市7/合肥市8/合肥市9/"

但inttemp2的值却为 0 ,inttemp明明有值,怎么长度为 0,是什么情况?

请给予解释,谢谢。
...全文
601 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
icthuang85 2009-11-21
  • 打赏
  • 举报
回复
谢谢各位,问题解决.
情况如六楼所述. 谢谢10楼,讲解的很清楚.
汪宁宇 2009-11-21
  • 打赏
  • 举报
回复
强烈建议楼主使用这个VC读写ini文件(第三方开源类)

http://blog.csdn.net/wangningyu/archive/2009/11/11/4799718.aspx
nintendo_dskay 2009-11-21
  • 打赏
  • 举报
回复
其实在CString类里面是有个变量记录着该字符串的长度的,它的值可以与CString字符缓冲区里面字符串的长度不一样。
楼主用的是直接对其字符缓冲区进行操作,而此时它的长度值没有改变,依然是初始的0,所以得出来的userlist就是“长度为0”了,然后再用CString里重载的“=”来对inttemp进行赋值操作。因为当中是直接把缓冲区复制过去,并且长度值类变量也复制过去。所以就是0了。

GetPrivateProfileSection中的参数不要用CString,最好还是自己开辟一个字符数组作为缓冲区
比如char buffer[1024];
然后GetPrivateProfileSection会返回一共读取的字节数
最后再根据每个键值对的分隔方式来进行处理,一般是‘\0’进行分隔,“\0\0”进行结尾的。
WaistCoat14 2009-11-20
  • 打赏
  • 举报
回复
CString使用不当导致的,因为没有分配Buffer就把CString当作参数传递给函数了。

具体参看6楼
zyq5945 2009-11-20
  • 打赏
  • 举报
回复
char buf[1500];
memset(buf,0,sizeof(buf));
GetPrivateProfileSectionA("安徽省",buf,sizeof(buf),"d://PROVINCE_CITY.ini");
int nlen = strlen(buf);

//你看看nlen是不是不为0了,还是0的话就不是我说的那个问题。如果是你再用MultiByteToWideChar转成UNICODE字符。或者你的程序不要做成用UNICODE字符集的。
zoulie 2009-11-20
  • 打赏
  • 举报
回复
定义一个char userlist[1500] = {0};
GetPrivateProfileSection(session, userlist,1500,_T("d://PROVINCE_CITY.ini"));
试下
WaistCoat14 2009-11-20
  • 打赏
  • 举报
回复
CString  userlist;
CString session=_T("安徽省");
GetPrivateProfileSection(session,userlist.GetBuffer(1500),1500,_T("d://PROVINCE_CITY.ini"));
userlist.ReleaseBuffer();
CString inttemp = userlist;
int inttemp2 =inttemp.GetLength();
icthuang85 2009-11-20
  • 打赏
  • 举报
回复
无人解答吗?
icthuang85 2009-11-20
  • 打赏
  • 举报
回复
应该如何处理,谢谢
icthuang85 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zyq5945 的回复:]
考虑下UNICODE和MBCS的情况,d://PROVINCE_CITY.ini可能是MBCS格式字符,你按UNICODE来读取当然是会出错。
http://blog.csdn.net/bluejoe2000/archive/2009/08/19/4461416.aspx
[/Quote]


很可能是种情况。
zyq5945 2009-11-20
  • 打赏
  • 举报
回复
考虑下UNICODE和MBCS的情况,d://PROVINCE_CITY.ini可能是MBCS格式字符,你按UNICODE来读取当然是会出错。
http://blog.csdn.net/bluejoe2000/archive/2009/08/19/4461416.aspx
djjs280 2009-11-20
  • 打赏
  • 举报
回复
试试
CString userlist = NULL;
CString session=_T("安徽省");
userlist.GetBuffer(260);
GetPrivateProfileSection(session,(LPWSTR)(LPCTSTR)userlist,1500,_T("d://PROVINCE_CITY.ini"));
CString inttemp = userlist;
int inttemp2 =inttemp.GetLength();

16,467

社区成员

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

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

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