Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87092
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 281
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-07 14:42
个人简介

业精于勤,荒于嬉;凡事用心,事事皆成。

文章分类

全部博文(19)

文章存档

2017年(1)

2016年(9)

2015年(2)

2014年(2)

2013年(5)

我的朋友

分类: C/C++

2013-08-09 23:45:57



上一篇我写的关于     MFC编程取注册表多字符串的方法     其实是用了一种比较巧妙的思路,剔除一些其他复杂的元素。

      但是今天我又给大家介绍一种比较好的方法,也比较易于理解,这个是在一个大牛的指导下完成的,Share with You!

      我们现在知道,多字符串意味着有一个长串,里面有大大小小不同的短字符串,短字符串之间有某个特定的符号隔开以区分不的短字符串,那么我们怎么知道我们取得值到底是不是我说的这样呢?    判断方法很简单,我们知道在我们定义的每个变量时,内存都分给了它一个地址,首先我们得知道这个变量的起始地址,因为连续分配,我们用内存查看器来查看里卖弄的数据,所以我们只要输入起始地址就可以看到一连串的内存结构了。啥都不说,上图好理解:


        看到了吧,这就是指针所指的内存空间存放的的空间布局。既然知道这样子那不也就好解决问题了么?


        下面附上一个例子的代码:

点击(此处)折叠或打开

  1.             char *p;
  2.             p=lpsc->lpDependencies;
  3.             CString str;
  4.             
  5.             void *q = lpsc;
  6.             
  7.             int qtop=p - q;

  8.             CStringArray array;
  9.             int i = qtop;//开始位置为依赖项起始位置,相当于计数器。

  10.             //依赖项是以\0来区分,当遇到\0\0标志结束。这样可以通过以字符串为标志的一个整串。
  11.             while(i<dwBytesNeeded)
  12.             {
  13.                 CString strStep = p;
  14.                 if(0 == strStep.GetLength())//保证正常结束
  15.                     break;
  16.                 i = i + strStep.GetLength() + 1;//加1是跳过非字符串
  17.                 p = p + strStep.GetLength() + 1;
  18.                 array.Add(strStep);                
  19.             }
  20.         
  21.                 for(int it = 0; it < array.GetSize(); it ++)
  22.                 {
  23.                     str = str + array.GetAt(it) + "\r\n";
  24.                 }
  25.             }
        是吧,以上的例子我就不用过多解释我想大家也都会看明白原理,真心的希望大家对多字符串有一定的理解,也希望大家能够相互交流交流。还请多多拍砖,有不足的地方请多多指教!我会好好努力的!加油!


阅读(2944) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~