Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 10
1

Считать символы из файла в массив

20.08.2019, 01:44. Показов 1363. Ответов 4

Author24 — интернет-сервис помощи студентам
Всем привет.
Нужно считать из файла символы и поместить их в массив.
Разрешены только функции open, read, write, malloc, free.
Не понимаю, как написать свой realloc.
Считываю open по символу в буфер buf[1], хочу записать в new_c, перевыделяя на него память. Как? Помогите, пожалуйста.

Добавлено через 1 час 50 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <unistd.h>
#include <fcntl.h>
#include <io.h>
//вероятно, забыла пару заголовков
 
char *ft_realloc (char *str, int size)
{
    int     i;
    char *new_c;
 
    i = 0;
    new_c = (char *)malloc(sizeof(char) * size);
    if (!new_c) exit;
    while (i < size)
    {
        new_c[i] = str[i];
        i++;
    }
    new_c[size] = '\0';
    return (new_c);
}
int main()
{
    int     fd;
    char    buf[1];
    char    *is_read;
    int     i;
 
    i = 1;
    is_read = (char *)malloc(sizeof(char) * 1);
    fd = open(%filename%, O_RDONLY);
    while ((read(fd, buf, 1)));
    {
        is_read = ft_realloc(buf, i);
        i++;
    }
    printf("%s\n", is_read);
    return (0);
}
Так?

----btw
Хотелось бы, конечно, читать не по символу, а побольше как-то. Вроде по символу не эффективно, поправьте, если ошибаюсь.
Но проблема в том, что при попытках считывать ридом больше 1го символа я упираюсь в кратность количества символов количеству считываемых байтов. Например, я считываю по 100 байтов, а в тексте 180 символов. Это 2 проходки.Тогда по завершению цикла while((read(fd, buf, 100))) я получу в буфере 80 символов из второй проходки и 20 из первой. Они не убираются free. Free просто отменяет резервацию области памяти и даёт возможность перезаписи. Какие есть варианты оптимизации считывания? В задании, которое делаю, могут подсунуть хоть 30000х30000 символов.
И да, как считаете, куда их (символы) лучше деть? Варианты: строка, массив строк (матрица), ваш вариант.
-----btw2
Можете объяснить, где и как работает выражение
C
1
2
3
4
5
6
7
8
int fd;
char *s;
 
fd = open (file, O_RDONLY);
s = malloc(1);
read(fd, s, 20000);
s[20000] = '\0'; // закончим наш беспредел :)
cout << s << endl;
Хочу понимать, в какой области памяти и до каких пор. Я прочитала и удачно вывела из файла 20к символов, выделив память только на один байт.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2019, 01:44
Ответы с готовыми решениями:

Считать символы из файла в массив
Пожалуйста. нужен код для реализации считывания символов из файла (.txt) в массив На С (и если не...

Файл: Необходимо считать символы из файла и записать в массив unsigned int array[2]. Не подскажите как это сделать?
Итак, есть файл. В нем записано восемь символов по одному байту, мне нужно считать их и записать в...

Нужно считать с файла определенное число символов и эти символы удалить из файла
Нужно считать с файла определенное число символов и эти символы удалить из файла

Считать символы из файла
Есть предварительно созданный файл, считать его все символы

4
Заблокирован
20.08.2019, 07:25 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(int argc , char * argv[])
{
    char *p=0;
    int i,sz=0;
    FILE *f=fopen("f.txt","r+b");
    while(!feof(f))
    {
        p=(char*)realloc(p,sz+1);
        fread(p+sz++,1,sizeof(char),f);
    }
    fclose(f);
    for(i=0; i<sz; i++)
        printf("%c",p[i]);
    free(p);
    system("pause");
    return 0;
}
0
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
20.08.2019, 09:54 3
Pvt, https://stackoverflow.com/ques... ways-wrong
0
0 / 0 / 0
Регистрация: 16.01.2016
Сообщений: 10
20.08.2019, 12:01  [ТС] 4
У меня нет возможности юзать другие функции, кроме перечисленных. У меня нет феофа. И функции я написала правильно, read и ooen это Линукс.
И я попросила помочь написать свой realloc, а не юзать стандартный.
0
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 15
05.11.2020, 13:54 5
Здравствуйте) программа всё правильно выводит, почему-то в конце знак "=". Не понимаю, откуда он взялся и как убрать
0
05.11.2020, 13:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2020, 13:54
Помогаю со студенческими работами здесь

Считать символы из файла и вывести их в консоль
Программа должна считывать символы из файла и выводить их в консоль Файл test содержит текст...

Как считать из файла нестандартные символы
Всем доброго времени суток! Задача: необходимо считать из файла нестандартные символы, такие как...

Считать символы из вектора в массив чаров
Задача из вектора string перекидать значения в массив чаров, каждый элемент вектора это должен быть...

Считать строку с файла, удалить повторные символы
Чтение данных входного текстового файла Input.txt и запись в выходной файл Output.txt содержимого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru