早上好 我目前正在为 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/