-1

所以我有一个名为 task 的结构,它初始化了一些东西。

typedef struct _task{
        char *task_name;
        int priority; // higher numbers have higher priority                                                                                                                  
        char date_entered[11];
        char date_completed[11]; // not used yet                                                                                                                              
} task;

我正在尝试编写一个名为 task *makeTask 的函数,它接受 (char *name, char *date, and char *priority) 我需要为新任务分配内存,新任务中的名称,我认为日期。到目前为止,我已经使用这个遇到了分段错误:

task *makeTask(char *name, char *date, char *priority)
{
  int i;
  int j;
  int k;
  task *newtask = malloc(sizeof(task));
  for(i=0; name[i] != '\0'; i++){
    if(name[i] == '\n')
      name[i] = '\0';
    }
  newtask->task_name = malloc(sizeof(char *)*(strlen(name)+1));
  strcpy(newtask->task_name, name);
  newtask->priority = atoi(priority);
  for(j=0; date[j] != '\0'; j++){
    if(date[j] == '\n')
      date[j] == '\0';
  }


  return newtask;// FILE THIS IN                                                                                                                                              
}

我想我对字符串以及如何操作它们并没有真正扎实的理解。为什么我的代码在这里给我一个分段错误?是循环还是我为结构分配内存的方式?任何帮助,将不胜感激。

4

1 回答 1

0

我还没有发现任何可以保证分段错误的东西,但是这里有一些问题。

你的循环,

  for(i=0; name[i] != '\0'; i++){
    if(name[i] == '\n')
      name[i] = '\0';
    }

除了有些奇怪之外,您还假设name已正确初始化。如果还没有,那么该循环将引发分段错误。你的date循环也是如此

以下行:newtask->task_name = malloc(sizeof(char ) (strlen(name)+1));

sizeof(char *), 有点奇怪,因为您正在初始化一个字符数组,而不是一个字符指针数组(一个数组数组)。我不知道这是否真的有太大的不同,但这很奇怪。

于 2013-04-22T17:05:18.693 回答