c - 删除一行文本文件

标签 c arrays pointers text-files

所以,我正试图从一个编号的文本文件中删除一个文件。\n 之后的每个条目都是一个新数字。我试图获取文件,将每一行存储在一个字符串中,然后通过省略不需要的行并打印其余行来创建一个新文件。不幸的是,指针给我带来了麻烦。它删除一个,并在正确的位置返回另一个,但没有使用正确的字符串或返回一个空白文件。

fp=fopen("data.txt", "r+");
fpo=fopen("out.txt", "w");

printf("Please enter number of the student whose data you would like to delete.\n");

scanf("%d", &i);

while(fgets(str, 128, fp)){
    if((atoi(str)!=i))
    {
        fputs(str, fpo);
    }
}
fclose(fp);

fp=fopen("data.txt","w");

while(fgets(str, 128, fpo)){
    if((atoi(str)!=i))
    {
        fputs(str, fp);
    }
}
fclose(fp);

fclose(fpo);

最佳答案

您拥有的东西过于复杂(并且不适用于大文件,并且会浪费内存)。为什么不逐行复制文件,不复制然后要排除的文件?

FILE *f_in = fopen("infile.txt", "r");
FILE *f_out = fopen("outfile.txt", "w");
// ...error checking comes here...

char buf[LINE_MAX];

while (fgets(buf, sizeof buf, f_in)) {
    if (!(/* omission condition here */)) {
        fputs(buf, f_out);
    }
}

fclose(f_in);
fclose(f_out);

关于c - 删除一行文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20292452/

相关文章:

Javascript将多个对象插入一个空对象

c++ - 指针 vector 而不是对象

c++ - 内存去了哪里?

c - 调用库函数后无法访问/修改所需的指针值

为用户数据选择 const 与非常量指针

C++ 自定义数组容器动态大小

c - fscanf 和动态数组分配

c - 没有参数类型的函数指针?

c - 如何在 C 中使用 malloc 和 realloc 正确分配结构中的数组?

c++ - 为什么 uint8_t 在分配给取消引用的 uint32_t 指针时用完 4 个字节?