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

Прочитать файл в функции и вернуть строку

20.12.2020, 16:41. Показов 587. Ответов 9

Author24 — интернет-сервис помощи студентам
Никак не получается прочитать данные из файла и вернуть их.
Как это можно сделать правильно?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char * readFile(const char * path) {
  FILE * f = fopen(path, "r");
  char * rtn;
  if (f != NULL) {
    char data[1024];
    fgets(data, sizeof(data), f);
    rtn = data;
  } else {
    rtn = NULL;
  }
  return rtn;
}
 
const char * string = readFile("/test.txt");
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2020, 16:41
Ответы с готовыми решениями:

bat файл чтобы прочитать строку из cmd и записать в файл
Здравствуйте, навыков в написании батников немного, появилась тяжелая для меня задача. Подскажите,...

Вернуть строку из функции.
Как вернуть строку(AnsiString) из функции? int MyTXT (AnsiString Temlate, AnsiString tmp) { ...

C++ Windows прочитать файл в строку
Прошу помощи, т.к. не смог найти решения (Учу C++ совсем недавно). Задача: Прочитать файл и...

Вернуть указатель на строку из функции
Есть на с++ у меня функция: char *PrToStr(DWORD priority) { char *s; switch (priority) {...

9
из племени тумба-юбма
2467 / 1790 / 417
Регистрация: 29.11.2015
Сообщений: 8,690
Записей в блоге: 15
20.12.2020, 17:02 2
mcmega, таким способом вы ничего не вернете. Вы пытаетесь вернуть указатель на data. Но при выходе из функции, все переменные созданные в функции перестанут существовать, включая массив data.
Самый элементарный вариант, это объявить строку в главной функции и потом предавать ее через указатель в функцию readFile.
0
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
20.12.2020, 17:08  [ТС] 3
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Самый элементарный вариант, это объявить строку в главной функции и потом предавать ее через указатель в функцию readFile.
А как это делается? Я новичек в СИ.
0
из племени тумба-юбма
2467 / 1790 / 417
Регистрация: 29.11.2015
Сообщений: 8,690
Записей в блоге: 15
20.12.2020, 17:26 4
должно быть так (не проверял)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
char * readFile(const char * path, char*data) {
  FILE * f = fopen(path, "r");
  char * rtn;
  if (f != NULL) {
//    char data[1024];
    fgets(data, sizeof(data), f);
//    rtn = data;
  } else //{
    rtn = NULL;
//  }
  return rtn;
}
 
int main(void)
{
    char data[1024] = "";
    const char * string = readFile("/test.txt", data);
 
    return 0;
}
0
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
20.12.2020, 17:37  [ТС] 5
Я не очень понимаю, а что я тогда возвращаю, переменная rnt не задействована получается?
0
из племени тумба-юбма
2467 / 1790 / 417
Регистрация: 29.11.2015
Сообщений: 8,690
Записей в блоге: 15
20.12.2020, 17:44 6
mcmega, что то не совсем так я вам подсказал. Возвращать ничего не нужно, указатель ведь.
0
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
20.12.2020, 17:47  [ТС] 7
C
1
const char * string = readFile("/test.txt", data);
т.е. я в const char * string получу копию char data[1024]
Так получается?
0
из племени тумба-юбма
2467 / 1790 / 417
Регистрация: 29.11.2015
Сообщений: 8,690
Записей в блоге: 15
20.12.2020, 17:56 8
Цитата Сообщение от mcmega Посмотреть сообщение
т.е. я в const char * string получу копию char data[1024]
почти да, только это не копия.
исправил, работает
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
void readFile(char * path, char *data)
{
    FILE * f = fopen(path, "r");
    if (f != NULL)
        fgets(data, 1023, f);
    fclose(f);
}
 
int main(void)
{
    char path[] = "test.txt";
    char string[1024] = "";
    readFile(path, string);
printf("%s", string); // проверочный принт
    return 0;
}
1
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
20.12.2020, 18:03  [ТС] 9
Это не совсем то, что мне нужно.
Мне именно возвращать нужно, не напосусь столько памяти, функция для микроконтроллера, там памяти совсем мало.
В идеале вообще динамически выделять (под размер), возвращать и сразу же освобождать.
0
из племени тумба-юбма
2467 / 1790 / 417
Регистрация: 29.11.2015
Сообщений: 8,690
Записей в блоге: 15
20.12.2020, 18:33 10
Цитата Сообщение от mcmega Посмотреть сообщение
Мне именно возвращать нужно, не напосусь столько памяти, функция для микроконтроллера, там памяти совсем мало.
Так вы же сами задали размер 1024, я не знаю какую длину строки нужно.

Добавлено через 8 минут
ну вот динамическая, сделали принт и очистили
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <malloc.h>
 
void readFile(char * path, char *data)
{
    FILE * f = fopen(path, "r");
    if (f != NULL)
        fgets(data, 1023, f);
    fclose(f);
}
 
int main(void)
{
    char path[] = "test.txt";
    char *string = (char*)malloc(1024*sizeof(char));
    readFile(path, string);
printf("%s", string); // проверочный принт
    free(string);
    return 0;
}


Добавлено через 15 минут
Цитата Сообщение от mcmega Посмотреть сообщение
Мне именно возвращать нужно
Так вы и возвращаете в string строку из файла, или будет пусто, если файл пустой. Не понимаю как еще вы хотите.
1
20.12.2020, 18:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2020, 18:33
Помогаю со студенческими работами здесь

Как вернуть строку из функции?
#include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; string...

Как вернуть строку из функции
Здрасьте! Мне необходимо вернуть строку из функции, но Я чего то не понимаю.Вот простенькая...

Как прочитать bib-файл в строку?
Как прочитать bib-файл в строку в WindowsForms? Добавлено через 2 часа 26 минут Уже разобрался))

Прочитать m3u8 файл в строку из url
Как из данного URL скачать m3u8 файл в буфер, не сохраняя на СД карту, и считать его содержимое в...

Прочитать и записать нужную строку в файл
Подскажите пожалуйста, как в perl. Прочитать из файла вторую строку, кот. находится по пути:...

Как прочитать текстовой файл в строку?
Как прочитать текстовой файл в строку?


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

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