源于MFC编程时出现的一些问题,或许Linux编程不会出现这些问题,但是我写出来总结一下相关的经验。
在获取注册表中REG_MULTI_SZ的值的时候,往往会出现只能取到头一个值的情况,那么我们能够怎么样获取多个字符串的值呢?查了相关资料,说是字符串之间是以'\0'结束,而总串是以'\0\0'结束的,于是我就写了一个判断的方法,用char *p指向那个串的地址,只要是 '\0'就跳过去,是'\0\0'就结束,但是我实验的结果并不是那样的,因为我并不知道里面到底是什么。
所以,我换了一种思路,因为注册表里面的值无非都是一些ASCII的值,一般在0~128之间,我还是定义了一个char *p;那么我开始判断*p的值是不是在这个范围之内,如果不是我就跳过去,如果是我就赋给一个字符串,让他自加。那么什么时候判断结束呢?有时候返回的信息并不止这么多,所以我举一个例子:
-
char *p;CString str;
-
p = lpsc->lpDependencies;
-
//如何获取当前的依赖服务大小?
-
//char *q;
-
//q=lpsc->lpDisplayName;//p-q等于p的依赖服务大小加上q的名字。
-
-
-
//设置静态变量,当分割lpDependencies和lpDisplayName时直接退出。
-
static int n;
-
for(DWORD i=0;i < dwBytesNeeded;i++)
-
{
-
if(*p>0 && *p <128)//判断如果不在这个字符范围内,即可能是分割各个字段的分割符。
-
{
-
str += *p;
-
p++;
-
n=0;//如果连续移动,设置n为0,既没有多个分割符在一起。
-
}
-
else
-
{
-
//如果有分隔符,一个的话即为多字符串之间内部的分割,例如:Dhcp的服务依赖:Tcpip@Afd@NetBT@@@@@,用@分割。
-
str += " ";
-
p++;
-
n++;
-
if(n>2)
-
break;
-
//如果有分隔符,且不止一个,即为多字符串的分割。其实分割符占用5个char类型的空间。Win Server 的为3个char类型的空间。
-
}
-
}
以上例子是在获取某个服务的时候的相关服务时取到的结果,取到自己想要的值。我只是写下来给自己留个纪念,也和大家分享一下。
阅读(1891) | 评论(0) | 转发(0) |