#define LENGTH 6
typedef char data_t[LENGTH];
struct foo {
const data_t data;
...
}
...
void bar(data_t data) {
printf("%.6s\n", data);
struct foo myfoo = {*data};
printf("%.6s\n", foo.data);
}
我试图让这个结构直接保存我感兴趣的数据,sizeof(foo) == 6+the rest
而不是sizeof(foo) == sizeof(void*)+the rest
。不过,我找不到一种方法来初始化一个foo
类型的结构与data_t
。我想也许我可以从字段中删除const
修饰符并使用memcpy
但我喜欢额外的安全性和清晰度。在一个struct中初始化一个const数组
我没有得到任何编译错误,但是当我运行的代码,我得到
123456
1??
因此复制没有正常工作,我想。
这是一个arduino(或类似的设备),所以我试图保持它非常便携的代码。
这难道不可能吗?
编辑:在data_t
字段上删除const
修饰符似乎没有帮助。
困难在于参数'data_t data'等价于'char * data',并且我没有一个简单的方法可以在卧床休息一小时半后想到。当然,C不支持直接数组赋值。你可以传递'struct foo *'到'bar'吗?然后很简单:'struct foo foo = * data;'。 –
不应该typedef是'typedef char data_t [LENGTH];'? 'struct foo = {* data};'对我来说看起来并不合法...... – InternetAussie
struct foo f {.data = {data [0],data [1],data [2],data [3] ,data [4],data [5]}}' – dasblinkenlight