为什么字符数组没有打印值?

Why char array is not printing value?

本文关键字:打印 字符 数组 为什么      更新时间:2023-10-16

我需要从字符数组中读回"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;
}

因为,假设 int 在目标平台上是 32 位,您将 4 个字节(0, 0, 0, 22, 0, 0, 0,取决于字节序(复制到addr指向的地址中,并且假设 short 是 16 位,您将在addr+4指向的地址复制 2 个字节(0, 11, 0,具体取决于字节序(, 导致addr包含字节0, 0, 0, 2, 0, 12, 0, 0, 0, 1, 0

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

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

您可以打印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;

您正在打印一个字符串,该字符串在第一个元素中具有不可打印的字符,在第二个元素中具有空字符,即您正在打印仅包含不可打印字符的以空结尾的字符串。