2012-01-13 35 views
0

我想創建一個結構數組,我已經完成了,並且必須接收來自用戶的輸入。第一部分數據是描述(字符串)。我也必須爲它分配內存。我不是那麼大的弦,我想檢查,因爲它進入,但我認爲我沒有設置它的權利。任何人都可以給我一個提示或我可以看看的頁面弄清楚嗎?使用malloc爲字符串分配內存(C++源)

非常感謝。這裏是代碼的重要代碼段:

struct myExpenses 
{ 
    char *description; 
    float cost; 
}; 


int main (void) 
{ 


struct myExpenses *pData = NULL; 
struct myExpenses expenses[60]; 
int exit=0; 
int i = 0; 
char buffer[81] = ""; 


printf("Please enter all your descriptions:\n"); 
for (i=0;i < 60; i++) 
{ 
    fgets(buffer,stdin); 
    expenses[i].description=(char *)malloc sizeof(buffer); 

} 
+2

您已經標記了這個爲'C++',但它看起來像普通的'C'代碼? – 2012-01-13 07:45:13

+1

由於這是特別是C++,而不是C,是否有一個原因,你爲什麼使用'char []'s而不是'std :: string's? – AusCBloke 2012-01-13 07:46:56

+0

對不起,這是一個C++課程,所以我很喜歡自動駕駛儀。 @AusCbloke:我不明白你指的是什麼。 – Robolisk 2012-01-13 07:49:43

回答

3

而不是使用malloc(),你可以使用strdup,它會自動爲你分配合適大小的緩衝區。

expenses[i].description = strdup(buffer); 
+0

哇。謝謝,這有效! 但是如果我選擇使用malloc,它會是什麼樣子? – Robolisk 2012-01-13 07:51:04

+0

這將是:費用[i] .description =(char *)malloc(strlen(buffer)+ 1); strcpy(費用[i] .description,緩衝區); – 2012-01-13 07:53:42

+0

標準C中沒有strdup - 你可能需要編寫自己的代碼:http://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c/252802#252802 – paxdiablo 2012-01-13 07:55:25

2

除此之外,您還缺少一對括號圍繞malloc呼叫並沒有真正告訴了什麼問題,你剛纔分配的內存,但不復制字符串。它可以在一個函數調用來完成,而不是與strdup功能:

printf("Please enter all your descriptions:\n"); 
for (i=0;i < 60; i++) 
{ 
    fgets(buffer,stdin); 
    expenses[i].description=strdup(buffer); 
} 

記得撥打free上所有的描述,當你與他們所做的,否則你將有內存泄漏。

編輯如何在給定的例子使用free

for (i = 0; i < 60; i++) 
    free(expenses[i].description); 
+0

我該如何着手打免費電話? 我知道這是免費()功能(我相信),但我不知道如何使用它。 – Robolisk 2012-01-13 07:57:40

+0

@Robsta這只是用'malloc','calloc'或者使用這些分配函數的函數(如'strdup':'free(pointer))'分配的指針來調用'free'。看到我更新的答案。 – 2012-01-13 08:00:23

+0

非常感謝你,我感謝你的幫助和時間。 – Robolisk 2012-01-13 08:07:50