2012-01-13 105 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