上一篇我写的关于 MFC编程取注册表多字符串的方法 其实是用了一种比较巧妙的思路,剔除一些其他复杂的元素。
但是今天我又给大家介绍一种比较好的方法,也比较易于理解,这个是在一个大牛的指导下完成的,Share with You!
我们现在知道,多字符串意味着有一个长串,里面有大大小小不同的短字符串,短字符串之间有某个特定的符号隔开以区分不的短字符串,那么我们怎么知道我们取得值到底是不是我说的这样呢? 判断方法很简单,我们知道在我们定义的每个变量时,内存都分给了它一个地址,首先我们得知道这个变量的起始地址,因为连续分配,我们用内存查看器来查看里卖弄的数据,所以我们只要输入起始地址就可以看到一连串的内存结构了。啥都不说,上图好理解:
看到了吧,这就是指针所指的内存空间存放的的空间布局。既然知道这样子那不也就好解决问题了么?
下面附上一个例子的代码:
-
char *p;
-
p=lpsc->lpDependencies;
-
CString str;
-
-
void *q = lpsc;
-
-
int qtop=p - q;
-
-
CStringArray array;
-
int i = qtop;//开始位置为依赖项起始位置,相当于计数器。
-
-
//依赖项是以\0来区分,当遇到\0\0标志结束。这样可以通过以字符串为标志的一个整串。
-
while(i<dwBytesNeeded)
-
{
-
CString strStep = p;
-
if(0 == strStep.GetLength())//保证正常结束
-
break;
-
i = i + strStep.GetLength() + 1;//加1是跳过非字符串
-
p = p + strStep.GetLength() + 1;
-
array.Add(strStep);
-
}
-
-
for(int it = 0; it < array.GetSize(); it ++)
-
{
-
str = str + array.GetAt(it) + "\r\n";
-
}
-
}
是吧,以上的例子我就不用过多解释我想大家也都会看明白原理,真心的希望大家对多字符串有一定的理解,也希望大家能够相互交流交流。还请多多拍砖,有不足的地方请多多指教!我会好好努力的!加油!
阅读(2937) | 评论(0) | 转发(1) |