使用malloc为字符串分配内存(c ++源代码)

时间:2012-01-13 07:43:28

标签: c windows malloc

我正在尝试创建一个结构数组,我已经完成了,我必须从用户那里收到一个输入。第一条数据是描述(字符串)。我也必须为它分配内存。我不是那么大的字符串将要检查,因为它正在进行,但我认为我没有正确设置它。任何人都可以给我一个提示或一个我可以看到的页面来解决它吗?

非常感谢。以下是代码的重要内容:

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 个答案:

答案 0 :(得分:3)

您可以使用strdup代替使用malloc(),它会自动为您分配合适大小的缓冲区。

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

答案 1 :(得分: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);