2

我的程序是一个任务列表管理器......它使用 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

在过去的一个小时里,我一直在挠头试图解决这个问题……我的代码怎么了?

4

2 回答 2

1

我会建议几件事:

  • 您需要一个额外的字节来存储任务名称,以保存空终止符
  • 用于strdup为字符串分配内存并将其复制到其中(用于任务名称)
  • 用于strcpy将日期复制到其预先分配的字符串中

我也不确定您是否向我们展示了实际导致问题的代码,但请尝试修复任务名称内存块以查看是否有帮助。

于 2013-04-17T02:49:40.250 回答
1
  1. 您没有为the_task->date_entered.

  2. 您需要添加strlen(name) + 1字节来说明空终止符。

于 2013-04-17T02:49:44.327 回答