c++ - 为什么 char 数组不打印值?

标签 c++ c++11

我需要从字符数组中读回“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 位,你正在复制 2 个字节(0, 11, 0 ,取决于字节序)在 addr+4 指向的地址,导致 addr 包含字节 0、0、0、2、 0、12、0、0、0、1、0

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

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

关于c++ - 为什么 char 数组不打印值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58161424/

相关文章:

c++ - 多个派生类的 dynamic_cast

c++ - 使用 using 捕获模板化可调用对象的返回类型

c++ - 内联命名空间和 using 指令在 C++11 中的区别?

c++ - 为什么计数整数不返回 d 的预期值?作为数字?

c++ - 图片中定义标记的位置检测

c++ - 类和 Windows DC (C++) 中的奇怪数组行为?

c++ - 如何只检测卷上已删除、已更改和已创建的文件?

c++ - C++ 内联汇编用于数据转换

C++:具有 `std::lock_guard` 的互斥量是否足以同步两个 `std::thread`?

C++ intel TBB 内循环优化