CUT字符串和CSTR在C++中给出不同的值

CUT字符串和CSTR在C++中给出不同的值,c++,C++,在我的代码中,有一个名为ChannelPacket的字符串变量。 当我在gdb中打印Channelpacket时,它给出以下字符串: \020\000B\001\237\246&\b\000\016\000\002\064\001\000\000\005\000\021\002\000\000\006\000\f\001\001\000\000sZK 但是如果我打印Channelpacket.c_str,它只给出\020输出。 请帮帮我。第二个字节是零,表示字符串的结尾。如果要输出原始字节,而不

在我的代码中,有一个名为ChannelPacket的字符串变量。 当我在gdb中打印Channelpacket时,它给出以下字符串: \020\000B\001\237\246&\b\000\016\000\002\064\001\000\000\005\000\021\002\000\000\006\000\f\001\001\000\000sZK

但是如果我打印Channelpacket.c_str,它只给出\020输出。
请帮帮我。

第二个字节是零,表示字符串的结尾。如果要输出原始字节,而不是将其视为以null结尾的字符串,则不能使用cout第二个字节是零,这意味着字符串的结尾。如果要输出原始字节,而不是将其视为以null结尾的字符串,则不能使用coutc_str返回指向字符的指针,该字符被理解为以NUL字符“\0”结尾

由于您的字符串包含嵌入的“\0”,因此当作为指向char的指针查看时,它将被视为字符串的结尾

当作为实际的std::string查看时,字符串的长度是已知的,因此无论嵌入的NUL字符是什么,都会写出整个字符串。

c\u str返回指向字符的指针,该指针被理解为以NUL字符“\0”结尾

由于您的字符串包含嵌入的“\0”,因此当作为指向char的指针查看时,它将被视为字符串的结尾


当作为实际的std::string查看时,字符串的长度是已知的,因此不管嵌入的NUL字符是什么,都会写出整个字符串。

避免将空字符放入std::string@尼尔·柯克为什么?只要您不试图将其视为C样式的字符串,它就可以保证工作。@Angew,因为它令人困惑。请避免将空字符放入std::string@尼尔·柯克为什么?只要你不想把它当作C风格的字符串,它肯定能工作。@Angew,因为它让人困惑。