今天在写C语言课程设计的时候,遇到一个bug让我想了很久很久。。。。
在写readLinesFormFile这个函数的时候,犯了一个错误。以至于输出的时候,输出的结果全部都是一模一样的且为最后一次。
// 从文件中读取获取
void readLinesFromFile(FILE *file, DynamicArray *array){
char *line = (char*)malloc(sizeof(char) * MAX_LINE_LEN);
int i;
for(i = 0; i < ACTIVE_MAXLINE ;i++) {
memset(line,0,sizeof(line));
if(fgets(line,MAX_LINE_LEN +1,file)==NULL) {
break;
} else {
array->lines[i] = (char*)malloc(sizeof(char) * MAX_LINE_LEN);
array->lines[i] = line;
}
}
array->size = i + 1;
printf("读取成功\n");
}
然后我看了半天也没发现哪错了,我决定将程序发给chatGPT看看,询问其中的问题。
看了chatGPT的回答,才明白是不能将array->lines[i]直接指向line的。因为这样每次array->lines[i]都指向line的地址,到最后一次line是什么array->lines就是什么。所以只用改一个地方就好了。
把array->lines[i] = line 改成 strcpy(array->lines[i] , line);
OK
值得一提的是:chatGPT真是个好工具。