C - 在数组混淆中存储结构

标签 c arrays struct pebble-watch

早上好 我目前正在为 Pebble Smartwatch 开发一个应用程序,它使用标准 C 语言,这是我刚开始使用的一种语言。

我有一个将货币交易添加到数组的函数。我这样定义交易:

struct Transaction {
    char * title;
    char * amount;
    char * date;
    char * text;
} txnsArray[20];

每当我收到交易时,它都会使用此函数添加到 txnsArray 中:

void addTransaction(DictionaryIterator * txnIter){
    Tuple *txnTitle_Tuple = dict_find(txnIter, TRANSACTION_TITLE);
    Tuple *txnAmount_Tuple = dict_find(txnIter, TRANSACTION_AMOUNT);
    Tuple *txnText_Tuple = dict_find(txnIter, TRANSACTION_TEXT);


    txnsArray[transOverview.txnCounter].title = txnTitle_Tuple->value->cstring;
    txnsArray[transOverview.txnCounter].amount = txnAmount_Tuple ->value->cstring;
    txnsArray[transOverview.txnCounter].text = txnText_Tuple->value->cstring;

    transOverview.txnCounter++;

}

现在,当我检查这个数组时,它会按预期添加条目,但我添加的最后一笔交易适用于所有条目。

假设我首先添加一笔金额为 2.5 欧元的交易,然后添加另一笔金额为 4.0 欧元的交易,那么两个条目的金额均为 4.0 欧元。

我做错了什么?非常感谢您的帮助。 :)

最佳答案

看起来 dict_find 函数没有为 value->cstring 分配内存,而是为每次调用使用相同的缓冲区。因此,数组中的结构最终指向同一内存的指针,如果 dict_find 修改它,它会修改所有数组条目。

关于C - 在数组混淆中存储结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22348209/

相关文章:

c++ - 比较 float 的位表示

无法打印结构

ruby-on-rails - 数组合并(联合)

arrays - 高效的矩阵转置算法

go - 继承和接口(interface)

c - 结构体之间的差异

c - 打印链表导致无限循环(C)?

C Socket recv()ing 奇怪的字符

javascript - 在 PHP 中使用 json_encode() 和在 JavaScript 中使用 JSON.parse() 来读取/写入文件

带赋值的c结构语法?