我最初编写了这段代码,它将 10 个组合const char[]
成一个大的char[]
. 它工作正常。
char total[1000000];
memcpy(total, myData0, ARRAYSIZE(myData0));
memcpy(&total[ARRAYSIZE(myData0)], myData1, ARRAYSIZE(myData1));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1)], myData2, ARRAYSIZE(myData2));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2)], myData3, ARRAYSIZE(myData3));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3)], myData4, ARRAYSIZE(myData4));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3) + ARRAYSIZE(myData4)], myData5, ARRAYSIZE(myData5));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3) + ARRAYSIZE(myData4) + ARRAYSIZE(myData5)], myData6, ARRAYSIZE(myData6));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3) + ARRAYSIZE(myData4) + ARRAYSIZE(myData5) + ARRAYSIZE(myData6)], myData7, ARRAYSIZE(myData7));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3) + ARRAYSIZE(myData4) + ARRAYSIZE(myData5) + ARRAYSIZE(myData6) + ARRAYSIZE(myData7)], myData8, ARRAYSIZE(myData8));
但我想我可以使用数组和循环来清理它。
char total[1000000];
char* myarray[10] = { myData0, myData1, myData2, myData3, myData4, myData5, myData6, myData7, myData8, myData9 };
for (int i = 0; i < ARRAYSIZE(myarray); i++)
{
memcpy(total, &myarray[i], ARRAYSIZE(myarray[i]));
}
我以为我做得很好,但是这段代码无法编译。我在 下收到一个错误ARRAYSIZE(myarray[i])
,内容为'char (*RtlpNumberOf(T (&)[N]))[N]': could not deduce template argument for 'T (&)[N]' from 'char *'
。我不明白这里的问题是什么。我尝试sizeof
交替使用,但它没有正确复制。为什么在这种情况下我不能使用 ARRAYSIZE?
在第一段代码中,您调用的ARRAYSIZE
是实际数组。在第二个中,您将 a 传递char *
给它。这个宏(实际上RtlpNumberOf
是它背后的宏)需要一个数组。数组和指针不是一回事,这是一个完美的例子。
创建具有其他数组大小的第二个数组,并在调用时使用它memcpy
:
char total[1000000];
char* myarray[10] = { myData0, myData1, myData2, myData3, myData4,
myData5, myData6, myData7, myData8, myData9 };
size_t myarray_sizes[10] = { ARRAYSIZE(myData0), ARRAYSIZE(myData1), ARRAYSIZE(myData2),
ARRAYSIZE(myData3), ARRAYSIZE(myData4), ARRAYSIZE(myData5),
ARRAYSIZE(myData6), ARRAYSIZE(myData7), ARRAYSIZE(myData8),
ARRAYSIZE(myData9) };
for (int i = 0; i < ARRAYSIZE(myarray); i++)
{
memcpy(total, &myarray[i], myarray_sizes[i]);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句