【发布时间】:2015-01-31 01:01:41
【问题描述】:
我正在做计算机 II 的家庭作业。它是在一个动态创建的字符串数组中创建一个待办事项列表,可以通过多种方式进行操作。需要对其进行操作的一种方式是通过添加任务,或者通过使用 realloc 来添加数组元素。我的代码如下,将一直运行,直到我在不同的函数中调用刚刚重新分配的数组。
void add_task(char **List, int line_num){
char task[1000];
List = (char**)realloc(List, (line_num+1)*sizeof(char));
List[line_num] = malloc((1000) * sizeof(char));
printf("Please enter the string you would like to use as your new task.\n");
scanf("%s",task);
strcat(task,"\n");
strcpy(List[line_num],task);
return;
}
【问题讨论】:
-
在您的消息中添加问号。
-
您有问题吗?我建议放弃
task[1000],您可以将scanf()直接放入malloc()ed 缓冲区。另外,我会返回新的line_num,因为您可以确定某些调用者会忘记增加他的副本。 -
sizeof(char)根据定义为 1,因此您不需要在malloc中使用它。 OTOH,在realloc中,您的意思是说sizeof(char *),即绝对不是1 的指针的大小。缺少的*将使List缩小4 或8 倍。跨度> -
感谢 EOF 的帮助。通过您的更改,我能够自行成功调用数组元素,即 List[line_num]。我在 main 中增加 line_num 以消除返回它的需要。但是,我似乎仍然无法在 for 循环中使用新的数组元素,这可能是因为我在 main 中递增吗?我检查以确保它工作正常并且 line_num 确实增加了,但我不确定。我会在几分钟内发布更多我的代码。