Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СИ.docx
Скачиваний:
6
Добавлен:
25.09.2019
Размер:
227.33 Кб
Скачать

[Править]при помощи fgets

Функция fgets применяется для чтения строки из потока. Считывание происходит до тех пор пока не будет достигнут конец строки (hex:0D0A, эквивалентны в листингах\n) или длина строки, в которую происходит считывание. Предположим, у нас есть файл some_file.txt с текстом

палиндромы

А в Енисее - синева.

А лама мала.

А лис, он умен - крыса сыр к нему носила. (И. Бабицкий)

#include <stdio.h>

#include <string.h>

int main (int argc, char* argv[]) /* argc хранит количество параметров, а argv[] указатели на эти параметры.

Например, если мы запустим исполняемый файл "fgets_example param1 param2", то argc будет равно 3, а argv[] = {"fgets_example", "param1", "param2"}*/

{

FILE *file;

char *fname = "some_file.txt";

char result_sting[20]; //Строка в 20 символов

file = fopen(fname,"r");

if(file == 0)

{

printf("не могу открыть файл '%s'",fname);

return 0;

}

int i=0;

char *real_tail;

while(fgets(result_sting,sizeof(result_sting),file))

{

real_tail="";

printf("Строка %d:Длина строки - %d:",i++,strlen(result_sting));

if(result_sting[strlen(result_sting)-1] == '\n')//проверяем является ли последний элемент в строке символом ее окончания

{

real_tail="\\n";

result_sting[strlen(result_sting)-1]='\0';

};// эта часть кода добавлена лишь для отображения символа конца строки в консоль без перевода на новую строку

printf("%s%s\n",result_sting,real_tail);

}

fclose(file);

return 0;

}

в результате выполнения мы получим

Строка 0:Длина строки - 11:палиндромы\n

Строка 1:Длина строки - 19: А в Енисее - си

Строка 2:Длина строки - 6:нева.\n

Строка 3:Длина строки - 17: А лама мала.\n

Строка 4:Длина строки - 19: А лис, он умен

Строка 5:Длина строки - 19:- крыса сыр к нему

Строка 6:Длина строки - 19:носила. (И. Бабицки

Строка 7:Длина строки - 2:й)

Функция strlen определяет длину строки по количеству символов до '\0' так например

printf("%d",strlen("123 \0 123")); //выведет 4

[Править]fwrite

В языке программирования Си функции fread и fwrite соответственно реализуют файловые операции ввода и вывода. fread и fwrite объявлены в <stdio.h>.

[Править]Запись в файл при помощи fwrite

fwrite определяется как

int fwrite ( const char * array, size_t size, size_t count, FILE * stream );

Функция fwrite записывает блок данных в поток. Таким образом запишется массив элементов array в текущую позицию в потоке. Для каждого элемента запишетсяsize байт. Индикатор позиции в потоке изменится на число байт, записанных успешно. Возвращаемое значение будет равно count в случае успешного завершения записи. В случае ошибки возвращаемое значение будет меньше count.

Следующая программа открывает файл пример.txt, записывает в него строку символов, а затем его закрывает.

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main(void)

{

FILE *fp;

size_t count;

char const *str = "привет\n";

fp = fopen("пример.txt", "wb");

if(fp == NULL) {

perror("ошибка открытия пример.txt");

return EXIT_FAILURE;

}

count = fwrite(str, 1, strlen(str), fp);

printf("Записано %lu байт. fclose(fp) %s.\n", (unsigned long)count, fclose(fp) == 0 ? "успешно" : "с ошибкой");

return 0;

}