cout string和c_str在c ++中给出不同的值

时间:2013-09-18 15:21:35

标签: 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输出。 请帮帮我。

2 个答案:

答案 0 :(得分:9)

c_str()返回一个指向char的指针,该指针被理解为由NUL字符('\0')终止。

由于您的字符串包含嵌入的'\0',因此当它被视为指向char的指针时,它被视为字符串的结尾。

当被视为实际的std::string时,字符串的长度是已知的,因此无论嵌入的NUL字符如何,都会写出整个字符。

答案 1 :(得分:3)

第二个字节为零,表示字符串的结尾。如果要输出原始字节,而不是将它们视为以空字符结尾的字符串,则不能使用cout << Channelpacket.c_str() - 而是使用cout << Channelpacket