首页 > 解决方案 > 为什么 char 不是单个字符?

问题描述

在 Microsoft 的DEV_BROADCAST_DEVICEINTERFACE_A文档中,类型dbcc_name定义如下:

char  dbcc_name[1];

但正如这个 StackOverflow 问题所示,它原来是一个string多个字符的。

不是16 位值char的单个字符吗?这是如何运作的?

(我原本以为char是 16 位。大概是因为那是它在 c# 中的大小。实际上可能是因为我正在查看DEV_BROADCAST_DEVICEINTERFACE_W,它确实是 2 个字节。)

标签: c++cwindows

解决方案


不是char16位的值吗?

在什么平台上?在大多数平台(包括所有运行 Windows、AFAIK)上,char是 8 位。

这是如何运作的?

类型文档解释了这一点:

dbcc_size

此结构的大小,以字节为单位。这是成员的大小加上 dbcc_name 字符串的实际长度(空字符由将 dbcc_name 声明为单字符数组来说明。)

换句话说, 的定义_DEV_BROADCAST_DEVICEINTERFACE_A利用了数组衰减为 C++ 中的指针这一事实,因此dbcc_name具有数组类型的 可以在大多数情况下用作以零结尾的字符串。实际的字符串与_DEV_BROADCAST_DEVICEINTERFACE_A对象连续存储,地址从dbcc_name.

值得注意的是,数组 (1) 的大小与其内容的长度无关;它只是 C++ 中最小的合法静态数组大小(遗留代码偶尔使用 struct 类型的成员char[0]。但是,这是编译器扩展而不是合法的 C++)。


推荐阅读