使用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);
} 

您可以使用strdup来自动为您分配合适大小的缓冲区,而不是使用malloc()。

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

除了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);

相关内容

  • 没有找到相关文章