gpt4 book ai didi

c++ - 无法解析包含空字符的字符串

转载 作者:太空狗 更新时间:2023-10-29 23:50:49 25 4
gpt4 key购买 nike

我正在尝试为 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.

最佳答案

你的字符串开始于:

"70:CONTENT_LENGTH\027\0SCGI\01\0REQUEST_METHOD\0POST\0REQUEST_URI\0" 

这些输出对于您提供的字符串实际上是正确的。我猜您可能忽略了 \027 是一个八进制字符常量,等等。字符及其索引是:

16: 'H'
17: '\027'
18: '\0'
19: 'S'
20: 'C'
21: 'G'
22: 'I'
23: '\01'
24: '\0'
25: 'R'

您的程序找到了前两个 '\0',它们是 1824,但是您做的是 ++ 在输出之前放在第一个上,因此输出 1924

如果您的意思是 '\0' 然后是 '2' 然后是 '7' 那么您就不需要将这些东西并列,例如利用字符串文字连接:

"70:CONTENT_LENGTH\0"
"27\0"
"SCGI\0"
"1\0"

关于c++ - 无法解析包含空字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26414800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com