【发布时间】:2014-10-16 22:14:58
【问题描述】:
我正在尝试为SCGI 请求编写解析器。我正在尝试解析示例中描述的字符串,但由于某种原因,我找不到第二个空字符的位置,即分隔内容长度值和下一个属性名称的位置。
这是我的测试字符串:
string scgi_request(
"70:CONTENT_LENGTH\027\0SCGI\01\0REQUEST_METHOD\0POST\0REQUEST_URI\0" \
"/deepthought\0,What is the answer to life?"
, 91);
我可以找到第一个空字符的位置,位置 18。但是一旦我试图找到之后的那个,返回的位置是无效的,偏移了几个字符,一直到位置 24。
这是我的算法:
size_t contentLengthEnd = scgi_request.find('\0');
size_t contentLengthValueEnd = scgi_request.find('\0', ++contentLengthEnd);
std::cerr << contentLengthEnd << std::endl; // 19, because I shifted this one forward
// otherwise I'd always get the same
// character
std::cerr << contentLengthValueEnd << std::endl; // 24, no clu why.
【问题讨论】:
-
request是什么?如果有的话,它与scgi_request有什么关系? -
@user657267 不应该这样,因为在ctor中他指定了字符串的长度,并且
\0在构造上不被视为特殊字符 -
我认为通过传递长度来创建字符串可以避免这种情况?
-
抱歉,我现在才注意到添加了换行符。
-
第一个
\0如您所述,位于第 18 位。下一个字符SCGI\01占据位置 19-23。第二个\0位于第 24 位。这不正确吗?