MyHandler.h中的全局函数GetAttribute

来源:互联网 发布:武汉php培训 编辑:程序博客网 时间:2024/06/05 00:14
//用static修饰使得该全局函数只在MyHandler.h中可见static bool GetAttribute(const char *s, const char *key, AString *value) {    //返回值由参数value传回    //先将value的内存清零    value->clear();    //得到关键字key的字符长度    size_t keyLen = strlen(key);    //由于传进来的参数的组织方式是    //每一段为一字符串,段与段之间用分号';'隔开    //需要查找的关键字key可能在某一段中    //形如:"*****;*****;key=***;***"    //循环处理每个段,直到key所在的那个段或者遇到结尾    for (;;) {        //跳过该段的空格字符        while (isspace(*s)) {            ++s;        }        //从位置s开始查找第一个出现的分隔符';'        //目的是定界一个段        const char *colonPos = strchr(s, ';');        //计算该段的长度len        //如果colonPos == NULL说明从位置s开始到结尾没有分隔符';'        //则从位置s开始到结尾是最后一段        //否则从位置s到位置colonPos为一段        size_t len =            (colonPos == NULL) ? strlen(s) : colonPos - s;        //此时该段的实际内容被定界为s[0,len-1]        if (len >= keyLen + 1 && s[keyLen] == '=' && !strncmp(s, key, keyLen)) {            //s[keyLen] == '=' 和 !strncmp(s, key, keyLen)为真说明s[0,keyLen-1]为关键字key            //将该段关键字key=后的内容赋值给value            //函数返回true,表示成功找到了key所对应的内容            value->setTo(&s[keyLen + 1], len - keyLen - 1);            return true;        }        if (colonPos == NULL) {            //代码执行到这里说明            //首先colonPos == NULL是最后一段,但是            //并没有从前面的if语句里返回            //说明直到查找到最后一段也没有找到符合key关键字的一段            //函数返回false表示查找失败            return false;        }        //迭代处理下一段        s = colonPos + 1;    }}
0 0