所以我有一个名为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
}
我认为我对字符串以及如何操纵它们没有非常扎实的理解。为什么我的代码在这里给我一个分段错误?它是循环还是我为结构分配内存的方式?任何帮助,将不胜感激。
答案 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 *)
,有点奇怪,因为你正在初始化一个字符数组,而不是一个字符指针数组(一个数组数组)。我不知道这是否真的会产生太大的影响,但这很奇怪。