【问题标题】:C adds a reference to array, not a valueC 添加对数组的引用,而不是值
【发布时间】: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


【解决方案1】:

name 成员从指向数组的指针更改。

typedef struct  {
    char name[40];
} ww_item ;

然后使用strcpy()

strcpy(ww_items[position].name, w);

不需要w 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2021-11-09
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多