操纵结构C中的字符串

时间:2013-04-22 16:51:38

标签: string struct

所以我有一个名为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和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                                                                                                                                              
}

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

1 个答案:

答案 0 :(得分: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 *),有点奇怪,因为你正在初始化一个字符数组,而不是一个字符指针数组(一个数组数组)。我不知道这是否真的会产生太大的影响,但这很奇怪。