我正在尝试从csv文件中删除名称ben。但是,编写的代码还会删除除最后一个名称以外的所有其他名称。是他们的原因吗?
FILE * pfile;
char line[21];
char *buffer;
char *ptr;
buffer = malloc(sizeof(char)*1000);
memset(buffer, 0, sizeof(char)*1000);
ptr = buffer;
//open the file
pfile = fopen("names.csv","r");
if(pfile != NULL){
while(!feof(pfile)){
fgets(line, 21, pfile);
if(strcmp(line, "ben\n")!= 0){
//put line in buffer
strcpy(buffer, line);
ptr += strlen(line);
}
}
fclose(pfile);
pfile = fopen("names.csv","w");
fprintf(pfile, "%s", buffer);
fclose(pfile);
}
else{
printf("could not read file\n");
}
getch();
return 0;}
答案 0 :(得分:0)
对于初学者来说,我认为您绝对应该使用free(buffer),它几乎是 1MB ,并且您不应该这样增加内存泄漏。在讨论这个主题时,我非常相信您还应该在写内存之前先 reallocate 缓冲内存。
您是否提出了一个解决方案,只需删除名称“ ben”所在的行?您可以通过将姓氏放在该位置的列表上来填充该位置...