0
早上好, 我目前正在開發Pebble Smartwatch應用程序,該應用程序使用標準C語言,這是我剛開始使用的一種語言。C - 在陣列混淆中存儲結構
我有一個函數可以將Money Transaction添加到數組中。我已經確定的交易是這樣的:
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€。
我在做什麼錯?非常感謝幫助。 :)
此代碼有可能_undefined behaviour_關於它的味道。嘗試'txnsArray [transOverview.txnCounter] .amount = malloc(strlen(txnAmount_Tuple - > value-> cstring)+ 1); strcpy(txnsArray [transOverview.txnCounter] .amount,txnAmount_Tuple - > value-> cstring);'確保實際複製_char_值,而不僅僅是將mem地址分配給 –
!就是這樣。非常感謝你:] – JohannesRu
好吧,我繼續前進,並發表評論作爲你的問題的答案。可能值得一讀,因爲我建議你不要使用'strcpy',而採用'memcpy',或者如果需要的話,'strncpy' –