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

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

文章分类

全部博文(19)

文章存档

2017年(1)

2016年(9)

2015年(2)

2014年(2)

2013年(5)

我的朋友

分类: C/C++

2013-08-07 15:02:59


源于MFC编程时出现的一些问题,或许Linux编程不会出现这些问题,但是我写出来总结一下相关的经验。

    在获取注册表中REG_MULTI_SZ的值的时候,往往会出现只能取到头一个值的情况,那么我们能够怎么样获取多个字符串的值呢?查了相关资料,说是字符串之间是以'\0'结束,而总串是以'\0\0'结束的,于是我就写了一个判断的方法,用char *p指向那个串的地址,只要是 '\0'就跳过去,是'\0\0'就结束,但是我实验的结果并不是那样的,因为我并不知道里面到底是什么。
    所以,我换了一种思路,因为注册表里面的值无非都是一些ASCII的值,一般在0~128之间,我还是定义了一个char *p;那么我开始判断*p的值是不是在这个范围之内,如果不是我就跳过去,如果是我就赋给一个字符串,让他自加。那么什么时候判断结束呢?有时候返回的信息并不止这么多,所以我举一个例子:
    

点击(此处)折叠或打开

  1.                 char *p;CString str;
  2.                 p = lpsc->lpDependencies;
  3.                 //如何获取当前的依赖服务大小?
  4.                 //char *q;
  5.                 //q=lpsc->lpDisplayName;//p-q等于p的依赖服务大小加上q的名字。


  6.                 //设置静态变量,当分割lpDependencies和lpDisplayName时直接退出。
  7.                 static int n;
  8.                 for(DWORD i=0;i < dwBytesNeeded;i++)
  9.                 {
  10.                     if(*p>0 && *p <128)//判断如果不在这个字符范围内,即可能是分割各个字段的分割符。
  11.                     {
  12.                         str += *p;
  13.                         p++;
  14.                         n=0;//如果连续移动,设置n为0,既没有多个分割符在一起。
  15.                     }
  16.                     else
  17.                     {    
  18.                         //如果有分隔符,一个的话即为多字符串之间内部的分割,例如:Dhcp的服务依赖:Tcpip@Afd@NetBT@@@@@,用@分割。
  19.                         str += " ";                        
  20.                         p++;
  21.                         n++;
  22.                         if(n>2)
  23.                             break;
  24.                         //如果有分隔符,且不止一个,即为多字符串的分割。其实分割符占用5个char类型的空间。Win Server 的为3个char类型的空间。
  25.                     }
  26.                 }

以上例子是在获取某个服务的时候的相关服务时取到的结果,取到自己想要的值。我只是写下来给自己留个纪念,也和大家分享一下。



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

CU博客助理2013-10-10 11:40:47

嘉宾点评: 欢迎zhengx_le,CU是个大家庭,不只Linux,Windows平台的技术交流与分享也是重要的一个问题。虽然Linux没有注册表,但多字符串问题也常常出现,因为Linux认为一切都是文件。需要说明的是博主在写作本篇后又撰写了一篇相关文章,进一步探讨了多字符串获取方法的思路,对此感兴趣的博友们可以关注一下。
(感谢您参与“原创博文评选”获奖结果即将公布)

7大爷2013-08-08 08:57:10

不错不错,学习了