Chinaunix首页 | 论坛 | 博客
  • 博客访问: 434553
  • 博文数量: 247
  • 博客积分: 185
  • 博客等级: 入伍新兵
  • 技术积分: 1005
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-10 10:39
文章分类

全部博文(247)

文章存档

2015年(3)

2014年(21)

2013年(53)

2012年(170)

分类: C/C++

2013-08-08 19:24:53


源于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.                 }

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



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