Как удалить строку в файле - C (СИ)
Формулировка задачи:
Подскажите пожалуйста, как на языке Си удалить строку и итог записать в файл? Очень нужно
Решение задачи: «Как удалить строку в файле»
textual
Листинг программы
#include "string.h"
#include "stdio.h"
void DeleteString (const char* st)
{
if ( FILE * f = fopen ("file.txt","r") ) {
const int size = 1024;
char pattern [size];
fseek (f,0,SEEK_END);
char * storyData = new char [ftell (f)+1];
char * ptr = storyData;
*ptr = 0;
fseek (f,0,SEEK_SET);
while ( fgets (pattern,size,f) ) {
if ( strcmp (st,pattern) != 0 ) {
strcat (ptr,pattern);
ptr += strlen (pattern);
}
}
fclose (f);
f = fopen ("file.txt","w");
fputs (storyData,f);
fclose (f);
delete [] storyData;
}
}
int main() {
DeleteString ("test\n");
}
Объяснение кода листинга программы
В этом коде реализована функция DeleteString, которая удаляет строку из файла.
- Строка, которую необходимо удалить, передается в функцию в качестве аргумента типа const char*.
- В функции создается указатель на файл, который открывается для чтения.
- Затем определяется размер буфера, который будет использоваться для чтения данных из файла.
- Вспомогательный указатель инициализируется нулевой строкой, а основной указатель - на начало буфера.
- В цикле while считываются строки из файла.
- Если текущая строка не совпадает со строкой, которую необходимо удалить, она добавляется к основной строке, а указатель сдвигается на длину этой строки.
- После чтения всех строк файл закрывается, открывается для записи и записывается в него измененная строка.
- После завершения работы с файлом он закрывается, а выделенная память освобождается.
В функции main() вызывается функция DeleteString с аргументом
test\n, что приведет к удалению всех строк из файла, которые содержатtest\n.