我正在尝试创建一个结构数组,我已经完成了,我必须从用户那里收到一个输入。第一条数据是描述(字符串)。我也必须为它分配内存。我不是那么大的字符串将要检查,因为它正在进行,但我认为我没有正确设置它。任何人都可以给我一个提示或一个我可以看到的页面来解决它吗?
非常感谢。以下是代码的重要内容:
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);
}
答案 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);