作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最初写这段代码,它将 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对于来自“char *”的“T (&)[N]”
。我不明白这里的问题是什么。我尝试使用 sizeof
替代,但它没有正确复制。为什么在这种情况下我不能使用 ARRAYSIZE?
最佳答案
在第一段代码中,您对实际数组调用了 ARRAYSIZE
。在第二个中,您将 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]);
}
关于c++ - 'char (*RtlpNumberOf(T (&)[N]))[N ]': could not deduce template argument for ' T (&)[N ]' from ' char *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51073640/
我最初写这段代码,它将 10 个 const char[] 组合成一个大的 char[]。它工作正常。 char total[1000000]; memcpy(total, myData0, ARRA
我是一名优秀的程序员,十分优秀!