为什么char数组没有打印值?

时间:2019-09-30 04:08:45

标签: c++ c++11

我需要从char数组中读回'id'和'port'。但是cout不会打印任何内容。正确的方法是什么?

谢谢您的帮助。

int main() {
    char addr[6];
    int id = 2;
    short port = 1;
    memcpy(&addr[0], &id, sizeof(int));
    memcpy(&addr[4], &port, sizeof(short));

    cout << "addres:" << addr << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:3)

由于假设目标平台上的int为32位,所以您要将4个字节({writeChar0, 0, 0, 2,取决于字节序)复制到2, 0, 0, 0所指向的地址中,并且假设short是16位,则您要在addr所指向的地址复制2个字节(0, 11, 0,具体取决于字节序),从而导致addr+4包含字节addr0, 0, 0, 2, 0, 1

C ++中的C样式字符串以0结尾,因此,如果第一个字符为0,则2, 0, 0, 0, 1, 0被解释为空字符串。

如果第一个字符为2,您仍然看不到任何内容,因为那不是可打印的字符。 (这是控制字符STX(文本开始)。)

答案 1 :(得分:0)

您可以打印addr内容的整数值以了解其中的内容。

for (int i = 0; i < 6; ++i )
{
    std::cout << "element " << i << " : " << static_cast<int>(addr[i]) << std::endl;
}

您很可能会得到:

element 0 : 2
element 1 : 0
element 2 : 0
element 3 : 0
element 4 : 1
element 5 : 0

假定:

  1. sizeof(int)在您的平台上为4。
  2. sizeof(short)在您的平台上为2。
  3. 您的平台使用小端数字系统。

使用时

    cout << "addres:" << addr << endl;

您正在打印的字符串在第一个元素中具有不可打印的字符,而在第二个元素中具有空字符,即,您正在打印的空终止字符串仅包含不可打印的字符。