//用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;
}
}
MyHandler.h中的全局函数GetAttribute
最新推荐文章于 2023-03-16 16:52:46 发布