我的程序是一个任务列表管理器......它使用fgets / stdin获取任务的名称,优先级和日期,并将其放在结构中。这是我的程序的相关片段:
task *makeTask(char *name, char *date, char *priority)
{
task *the_task = malloc(sizeof(task));
int i;
the_task->task_name = (char*)malloc(sizeof(char) * (strlen(name)));
for (i=0;name[i] != '\n'; i++) {
if (name[i] != '\0')
the_task->task_name[i] = name[i];
}
the_task->task_name[i] = '\0';
//already allocated for in struct
for (i=0;date[i] != '\n'; i++) {
if (date[i] != '\0')
the_task->date_entered[i] = date[i];
}
the_task->date_entered[i] = '\0';
the_task->priority = atoi(priority);
return the_task; // FILE THIS IN
}
这是预期的输出:
0: Feed the cats, priority: 5. Entered 01/01/1111
这是实际输出:
0: edsats, priority: 5. Entered 01/01/1111
过去一小时我一直在试图解决这个问题...我的代码发生了什么?
答案 0 :(得分:1)
我会建议一些事情:
strdup
为字符串分配内存并将其复制到其中(对于任务名称)strcpy
将日期复制到预分配字符串我也不确定你是否向我们展示了实际导致问题的代码,但是尝试修复任务名称内存块以查看是否有帮助。
答案 1 :(得分:1)
您没有为the_task->date_entered
分配空间。
您需要添加strlen(name) + 1
个字节来考虑空终止符。