【发布时间】:2019-09-06 02:02:58
【问题描述】:
我是 C 新手,从未使用非 OOP 语言做过任何事情。
我有一个结构数组。它对类来说是全局的,我解析一个 json,结果以上述数组结尾。我基于为每个条目提供一个属性的结构创建一个对象 (?)。 添加项目后,数组在所有位置上都具有相同的值。
我确实记得 C 在值和指针/引用方面很棘手,所以我做了一个小测试,看看数组是否真的只接受了引用:
typedef struct {
char* name;
} ww_item ;
char nameW[40];
// iterating through json {
// strcpy(nameW, data);
ww_item w = { nameW };
ww_items [ position ] = w;
strcpy(nameW, "d"); //replaces the "Hello" with "d" in all previous ww_items
显然确实如此,这就解释了为什么我的数组最终会重复添加到其中的最后一个元素,而不是列出我添加到其中的所有不同字符串。
我找不到任何关于这方面的简短信息,不幸的是,我的截止日期太近了,现在无法阅读整本 C 书。我很确定到目前为止我的假设是正确的,但现在我不知道要搜索/寻找什么来解决这个问题。
我可以接受一个丑陋的解决方案或解决方法,但目前我只是坚持这个。
感谢您的帮助。
【问题讨论】:
-
在 C 中,数组在许多情况下会衰减为指针。它们永远不会自动复制。
-
您不需要阅读整本教科书,只需阅读有关数组的章节。
-
显示
ww_item的定义。它的成员必须是指针,而不是数组。当您分配给它时,您只会得到原始数组的地址,而不是副本。 -
您需要使用
malloc()为数组分配新空间,然后使用strcpy()复制内容。 -
我询问了
ww_item结构的定义。
标签: c arrays pointers reference