在我的代码中,我有一个名为 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 输出。请帮助我。
c_str()
返回一个指向 char 的指针,该指针被理解为由 NUL 字符 ( '\0'
) 终止。
由于您的字符串包含一个嵌入'\0'
的 ,因此当被视为指向 char 的指针时,它被视为字符串的结尾。
当被视为实际std::string
时,字符串的长度是已知的,因此无论嵌入的 NUL 字符如何,都会写出整个内容。
第二个字节是零,表示字符串的结尾。如果要输出原始字节,而不是将它们视为以 null 结尾的字符串,则不能使用cout << Channelpacket.c_str()
-cout << Channelpacket
代替。