C++ как вернуть массив типа char из функции

487
26 мая 2017, 14:58

Не могу разобраться с возвратом массива из функции. Код:

loadData.cpp

#include "SaveText.h"
#include <fstream>
#include <iostream>
char* SaveText::loadData(char point[]) {
  std::ifstream load;
  load.open(point ios::out | ios::app);
  if(!load) {
    std::cout<<"ERROR!"<<std::endl;    
  }
  char* out_file = new char[200];
  while(1) {
    load.getline(out_file, sizeof(out_file));
    if(load.eof()) break;
  }
  return out_file;//не могу вернуть массив
}

main.cpp

#include "SaveText.h"
int main() {
  char *text_in_file[200];  
  SaveText data; 
  text_in_file = data.loadData("C://Users//...");
  data.saveData(text_in_file, "C://Users//...");
  return 0; 
}

По замыслу эта функция будет открывать файл и считывать от туда данные, после эти данные функция вернёт, а потом я буду решать что с ними делать.

Но при компиляции мне выдаёт ошибку:

main.cpp:8:16: error: incompatible types in assignment of 'char*' to 'char* [200]'
   text_in_file = data.loadData("C://Users//SilentiumNoxe//Documents//Projects//noteCoin//data//savedata.txt");
                ^
main.cpp:9:107: error: no matching function for call to 'SaveText::saveData(char* [200], const char [75])'
   data.saveData(text_in_file, "C://Users//SilentiumNoxe//Documents//Projects//noteCoin//data//outfile.txt");
                                                                                                           ^

Как правильно вернуть в данной ситуации массив и что значит "Нет подходящей функции для вызова"?

P.S. string, vector и пр. не предлагать. Спасибо.

Answer 1

Вот это -

char *text_in_file[200];

массив из 200 указателей на char, причем сама переменная text_in_file не может получить никакое иное значение, кроме определенного выше.

Вы же пытаетесь присвоить ей другой указатель, но не просто другой, а указатель на массив char.

В лучшем случае можно сделать

text_in_file[0] = data.loadData(...);

но это явно не то, что вы хотите...

Можно объявить так:

char *text_in_file;

и тогда ваше присваивание будет логично и понятно :)
Только не забудьте потом вызвать

delete[] text_in_file;
READ ALSO
Пользовательское управление в sfml

Пользовательское управление в sfml

Возникли проблемы в управлении спрайтомКоды клавиш управления храню в (int keyLeft, keyRight), они могут изменяться

358
как сконвертировать 2 байта hex Buffer в int

как сконвертировать 2 байта hex Buffer в int

есть вот такой буфер hex-значений - fe ff 03 99 00 01

315
Получение аудио-стрима через Chrome Extension

Получение аудио-стрима через Chrome Extension

Нужно получить аудио-стрим микрофона (не звука во вкладке, а именно микрофона) через расширение ChromeОбычный navigator

445