stu_name[s]=malloc(strlen(line)+1);//用malloc函数动态分配内存
时间: 2024-04-16 20:26:13 浏览: 111
是的,你可以使用`malloc`函数动态分配内存来保存每一行的名字。这样可以确保每个指针都指向独立的内存空间,避免指针指向相同的`line`数组,导致最终`stu_name`中存储的都是指向最后一行名字的指针。
下面是修改后的代码示例:
```c
char line[1000]; // 存储名字的数组
char *stu_name[20];
int s = 0; // 名字个数
while (fgets(line, sizeof(line), file) != NULL) // 将名字打印出来
{
// 动态分配内存保存名字
stu_name[s] = malloc(strlen(line) + 1);
strcpy(stu_name[s], line);
// 界面上轮流显示文件中的名字
printf("%s \r", stu_name[s]);
printf("\r");
fflush(stdout); // 刷新输出缓冲区
s++;
//printf("\r"); // 光标回到首行
}
// 使用完之后需要释放内存
for (int i = 0; i < s; i++) {
free(stu_name[i]);
}
```
在每次循环中,使用`malloc`动态分配内存来保存每一行的名字,确保每个指针都指向独立的内存空间。然后使用`strcpy`将`line`中的内容复制到动态分配的内存中。在使用完之后,需要遍历`stu_name`数组并使用`free`释放每个名字所占用的内存空间。
这样修改后,`stu_name`中存储的就是每一行名字的独立内存空间,而不再是指向`line`数组的指针。