【发布时间】:2013-03-15 03:54:15
【问题描述】:
我阅读了这个 (How to initialize a unsigned char array?),但它并没有完全回答我的问题。
我知道我可以像这样创建一个字符串数组:
const char *str[] =
{
"first",
"second",
"third",
"fourth"
};
如果我想 write() 这些我可以使用:write(fd, str[3], sizeof(str[3]));
但是如果我需要一个可变长度的无符号字符数组怎么办?我试过这个:
const unsigned char *cmd[] =
{
{0xfe, 0x58},
{0xfe, 0x51},
{0xfe, 0x7c, 0x01, 0x02, 0x00, 0x23},
{0xfe, 0x3d, 0x02, 0x0f}
};
我得到 gcc 编译警告,例如 *“标量初始化器周围的大括号” * "初始化使指针从整数不强制转换"
【问题讨论】:
-
如果不为您的子阵列引入名称,您将无法做到这一点。顺便说一句,您的代码被窃听了
write(fd, str[3], strlen(str[3]));。strlen不是sizeof。指针上的sizeof为您提供指针的大小,而不是它指向的数据的大小。 -
不存在可变长度数组。您的
str是一个指针数组,而不是可变长度数组。可以用字符串文字初始化指针。没有数组字面量,你不能用花括号列表初始化指针。 -
好的,知道了。我理解并同意这里的 cmets。谢谢!!
-
术语注释:在 C 中,“可变长度数组”又名 VLA 有一个非常具体的含义:它是一个长度在运行时确定的数组(即是一个变量或函数参数)。标准 C++ 没有 VLA。此外,整个功能有点问题,在 C 中使用它之前请先阅读它(在大多数情况下,你应该决定你实际上并不想使用它)。
-
我知道这在多年(几十年)前的 Borland Turbo C++ v3.0 中对我有用。看到这个答案,看起来 GCC 在没有一些帮助的情况下不会自行转换为 char[]:stackoverflow.com/a/15619960/14055985
标签: c++ c arrays char unsigned