Прочесть файл и записать в него новую строку - C (СИ)
Формулировка задачи:
Хочу потренироваться работе с файлами. Задача: прочесть файл и записать в него новую строку.
Подскажите плз, где ошибка?
Заранее благодарю.
#include <stdio.h>
int main()
{
FILE * mf;
int i=0, j=0;
char fname[20], str[100][100], c;
for(q; q<=100; q++)
{
for(w; w<=100; w++)
{
str[q][w]='\0';
}
}
char lol[]="\nWho is your daddy??\n\0";
gets(fname);
mf = fopen(fname, "a+");
while((c=fgetc(mf)) != EOF)
{
printf("%c", c);
if(c=='\n')
{
j=0; i++;
}
else
{
str[i][j]=c;
j++;
}
}
printf("\n");
fputs(lol, mf);
while((c=fgetc(mf)) != EOF)
{
printf("%c", c);
if(c=='\n')
{
j=0; i++;
}
else
{
str[i][j]=c;
j++;
}
}
fclose(mf);
return 0;
}
Ап: на строки 10-16 не смотрите, забыл удалить...
Ап2: прога работает, только в файл записывает еще много лишнего О_о
Решение задачи: «Прочесть файл и записать в него новую строку»
textual
Листинг программы
#include <stdio.h>
#include <malloc.h>
#include <io.h>
int main()
{
FILE * mf;
char fname[256]={0};
char lol[]="\nWho is your daddy??\n\0";
gets(fname);
int rsize = 0;
mf = fopen(fname, "a+");
long size = _filelength(_fileno(mf));//определили рамер файла
char *buff = NULL;
buff = (char*)malloc(size*sizeof(char));// char[size];//выделяем буф под него
while(!feof(mf))
{
rsize = fread(buff,sizeof(char),sizeof(char)*size,mf);//читаем
}
for(int i=0;i<rsize;i++)
{
printf("%c",buff[i]);//выводим
}
printf("%d , %d ",size,rsize);
fputs(lol,mf);//добавляем запись
free(buff);
//delete []buff;
fclose(mf);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменные:
FILE * mf;- указатель на файлchar fname[256]={0};- строка для хранения имени файлаchar lol[]=\nWho is your daddy?\n\0;- строка для добавления в файлint rsize = 0;- счетчик чтения файлаmf = fopen(fname,a+);- открываем файл на чтение и запись, добавляемa+_filelength(_fileno(mf));- получаем размер файлаchar *buff = NULL;- указатель на буфер для чтения файлаbuff = (char*)malloc(size*sizeof(char));- выделяем память под буферwhile(!feof(mf))- читаем файл до концаrsize = fread(buff,sizeof(char),sizeof(char)*size,mf);- считываем данные из файла в буферfor(int i=0;i<rsize;i++)- выводим данные из буфера на экранprintf(%c,buff[i]);- выводим символ из буфераprintf(%d , %d,size,rsize);- выводим размер файла и количество прочитанных символовfputs(lol,mf);- добавляем новую строку в файлfree(buff);- освобождаем память, выделенную под буферfclose(mf);- закрываем файлreturn 0;- завершаем программу