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