byte test[4];
memset(test,0x00,4);
test[]={0xb4,0xaf,0x98,0x1a};
上面的代码在']'标记之前给出了一个错误预期的primary-expression。 谁能告诉我这种类型的任务有什么问题?
答案 0 :(得分:14)
无法分配数组。您只能使用大括号初始化。
如果你想稍后“分配”它,你可以得到的最接近的是声明另一个阵列并复制它:
const int array_size = 4;
char a[array_size] = {}; //or {0} in C.
char b[array_size] = {0xb4,0xaf,0x98,0x1a};
std::copy(b, b + array_size, a);
或使用std :: tr1或boost:
中的数组类#include <tr1/array>
#include <iostream>
int main()
{
std::tr1::array<char, 4> a = {};
std::tr1::array<char, 4> b = {0xb4,0xaf,0x98,0x1a};
a = b; //those are assignable
for (unsigned i = 0; i != a.size(); ++i) {
std::cout << a[i] << '\n';
}
}
答案 1 :(得分:11)
Ben和Chris所说的是。
byte test[4]={0xb4,0xaf,0x98,0x1a};
如果你想在运行时这样做,你可以使用memcpy来完成这项工作。
byte startState[4]={0xb4,0xaf,0x98,0x1a};
byte test[4];
memcpy(test, startState, sizeof(test));
答案 2 :(得分:7)
除了@Chris Lutz的正确答案:
byte test[]={0xb4,0xaf,0x98,0x1a};
请注意,在这种情况下,您不需要显式指定数组大小,除非您希望数组长度大于括号之间的元素数。
这仅在您声明数组时初始化数组时才有效。否则,您将必须使用您喜欢的技术(循环,STL算法等)显式初始化每个数组元素。
答案 3 :(得分:4)
除了@UncleBens的正确答案外,我还要注意这一点:
byte test[4];
memset(test,0x00,4);
可缩短为:
byte test[4] = { 0 };
这是您尝试使用的初始化语法。该语言将填充未分配的空格,因此您不必编写{ 0, 0, 0, 0 }
(因此,如果您的数组长度稍后更改,则不必添加更多)。