std::string::find 返回错误的答案



有一些关于std::string::find的帖子(就像这里的这个和这个一样),但我的情况有些不同:

#include <string>
#include <stdio.h>
int main(int argc, char **argv)
{
std::string haystack = "ab\x10c200\x00\x00\x00\x00";
std::string needle   = "\x00";
printf("first index is %dn",(int) haystack.find(needle));
return 0;
}

根据这些值,我想知道为什么返回 8:

我猜"\200"算作 1 个字符(? 我可以让find"\x10"也视为 1 个字符吗?

一切正常

+---+---+---+---+---+---+---+------+---+---+---+---+
| a | b |  | x | 1 | 0 | c | 200 |  | x | 0 | 0 |
+---+---+---+---+---+---+---+------+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |   7  | 8 |   |   |   |
+---+---+---+---+---+---+---+------+---+---+---+---+

\变成了一个字符.看来你想用一个xNN.

即使您将\替换为文字字符串中的,它也不起作用,因为第一个x00将被视为终止零,并且在它被忽略之后将被视为终止其他字符。我想字符串的初始化应该如下所示:

std::string haystack = {'a', 'b', 'x10', 'c', '200', 'x00', 'x00', 'x00', 'x00'};
std::string needle   = {'x00'};

程序将输出 5。

2001 个字符。请参阅转义序列列表。我在这里包括了相关的:

Escape sequence    Description                    Representation
\                 backslash                      byte 0x5c in ASCII encoding
nnn               arbitrary octal value          byte nnn
xnn               arbitrary hexadecimal value    byte nn

200是值为 128 的单个字符(八进制中的 200 是十进制中的 128)。

\x10是 4 个字符:\(反斜杠)、x10。如果您希望将其作为单个字符,请不要转义反斜杠 -x10是值为 16 的单个字符(十六进制中的 10 是十进制中的 16)。

200零宽度非连接器之一。这是一个以 UTF-8 编码的 unicode 字符。

例如-

0x2e, 0x80, 0x8c (or in base 8, 342, 200, 214)

以下是字符串的索引方式:

0 A
1 b
2 \3 x 4 1
5 0 6 c
7
8 \9 x 10 0 11 0 12 \13 x 14 0 15 0 16 \17 x 18 0 19 0 20 \




21 x




22 0 23 0








请参阅7th索引。这将消除您的疑虑。

如果要将\x10读取为单个字符,请使用x10将其视为十六进制数。

最新更新