最终编辑:首先,谢谢你们耐心等待。将来我会尝试将MCVE带到我问的任何问题。
该程序现在似乎工作正常 - 我可能无意中删除了一个错字或其他东西。
这个问题让我很烦恼 - 我没有选择以这种方式实施它,但它是必需的,我需要解决它。
我有一个应该从结构中读取数据的函数,如下所示:
typedef struct {
int data;
char extraneous_stuff[];
} MyStruct;
...
//there's also a ParentStruct that holds a MyStruct array
...
void read_data(ParentStruct *parent, int which_MyStruct, int *data) {...
我需要做的是使用int *数据作为out参数从选定的MyStruct中复制int数据。当然,我遇到的问题是 out-parameter和MyStruct字段具有完全相同的名称。我发现尝试直接复制,即编译*data = parent->array[which_MyStruct].data;
,但数据实际上并未复制到out参数。
为了遵守规范,我不应该在这里更改参数的名称。我注定了吗?
编辑:我在函数中包含了以下print语句:
printf("%d", *data);
printf("%d", parent->array[which_MyStruct].data);
并且已经放了
int n = 0;
void read_data(*parent, which_MyStruct, &n)
我回来了
0
0
结果。
编辑2:
好的,这很奇怪。我有这个:MyStruct current = parent->array[which_MyStruct];
printf("%s", current.extraneous_stuff[0]);
printf("%d", *data);
printf("%d", parent->array[which_MyStruct].data);
现在突然" parent-> array [which_MyStruct] .data"具有适当的价值。 也许这是未定义的行为,因为我做的唯一改变是包括print语句" printf("%s",current.extraneous_stuff [0]);"并且输出发生了变化。