这是我的第一个问题,请注意我对编码很新。快速搜索对我没有帮助,因为我认为答案可能过于简单。
我在CAPL中编写了一些代码(基于C的CANoe特定语言)。 让我的场景简化:我必须读取10个值Input,但我只能一次读取一个(由于HW的原因)。
我的值存储在缓冲区(rsBuf)中,现在我每次读取值时都试图定义一个帮助数组(rsBuf1 ... 10)。 最后,我将创建另一个数组,其中添加了rsBuf1 ... rsBuf10。
的值对于每个“阅读动作”,我想定义 rsBuf1 = rsBuf; rsBuf2 = rsBuf;等等...
错误:对于“rsBuf1 = rsBuf;”错误1112 at(732,16):操作数类型不兼容。 编译失败 - 1个错误,0个警告
我的“真实”价值观:
variables
{
byte rsBuf[1024];
byte rsBuf1[1024];
}
有一种简单的方法可以从另一个阵列中执行此操作吗? 我也尝试了一些我发现的其他符号,比如rsBuf1 = {rsBuf},但没有帮助。我当然可以定义 rsBuf1 [1] = rsBuf [1]; ... rsBuf1 [1024] = rsBuf [1024];
但我想这会浪费时间。 在此先感谢,欢呼罗伯特
答案 0 :(得分:2)
您无法通过C中的赋值复制数组,因为语法不允许它。最好的解决方案是使用memcpy
函数。
或者,如果对程序设计有意义,可以将数组放在包装器结构中:
typedef struct
{
int array [5];
} array_wrapper_t;
array_wrapper_t this = {1,2,3,4,5};
array_wrapper_t that;
that = this;
这应该产生与调用memcpy
相同的机器代码。
答案 1 :(得分:1)
您可以按如下方式使用memcpy
复制整个阵列:
memcpy(rsBuf1, rsBuf, elcount(rsBuf));
以下内容将复制前四个字节:
memcpy(rsBuf1, rsBuf, 4);
您可以选择定义复制功能,请参阅copy_buffer()
实施:
variables
{
byte rsBuf[1024] = {1, 2, 3, 4, 5, 6, 7, 8};
byte rsBuf1[1024];
}
on start
{
print_buffer(rsBuf, 8);
print_buffer(rsBuf1, 8);
copy_buffer(rsBuf1, rsBuf, elcount(rsBuf));
print_buffer(rsBuf1, 8);
}
void copy_buffer(byte dest[], byte src[], long len)
{
int i;
for (i = 0; i < len; i++)
dest[i] = src[i];
}
void print_buffer(byte buf[], byte len)
{
int i;
writeLineEx(0, 0, ">");
for (i = 0; i < len; i++)
writeEx(0, 0, " 0x%02x", buf[i]);
}