Создание массива большого размера типа char и копирование файловых символов

Мне нужно скопировать символы файла в массив большого размера, поэтому я создал этот код:

std::vector<std::vector<char> > strings;

strings.resize(rows);

for (int i = 0; i < rows; i++)  
{ 
    strings[i].resize(columns); 
}

ifstream in("filename.txt");

for (int i = 0; i < rows; i++)    
    in.getline(strings[i], columns);

strings должен содержать все символы файла, но когда я компилирую эту программу, у меня возникает следующая ошибка:

нет соответствующей функции для вызова ‘std::basic_ifstream >::getline(std::vector >&, int)’

(и другие строки ошибок)

Как я могу скопировать все символы файла в большой массив символов?


person B.O.    schedule 03.04.2013    source источник
comment
Мне нужно скопировать символы файла в массив большого размера — почему вы так думаете? Неужели нет способа разобрать содержимое файла на лету?   -  person Arne Mertz    schedule 03.04.2013
comment
Связано: stackoverflow.com/q/1567082/179910   -  person Jerry Coffin    schedule 03.04.2013
comment
Мне нужно прочитать первые 6 элементов каждой строки, поэтому кто-то предлагает мне скопировать весь файл в двумерный массив.   -  person B.O.    schedule 03.04.2013
comment
ЕСЛИ вам нужно прочитать первые 6 элементов в строке, тогда прочитайте первые 6 элементов одной строки, используйте их и перейдите к следующей строке вместо того, чтобы копировать весь материал.   -  person Arne Mertz    schedule 03.04.2013


Ответы (3)


вы должны использовать std::stringвместо std::vector<char>

если по какой-то причине вам очень нужно использовать структуру данных std::vector<std::vector<char> >

затем используйте std::string, чтобы прочитать файл, а затем преобразовать его в std::vector<char>, но я не понимаю, почему вы хотите это сделать

person tiridactil    schedule 03.04.2013

in.getline() не может принимать вектор char в качестве первого аргумента. Вы должны использовать std::string.

Вы могли бы сделать getline(in, strings[i]);.

Чтобы заполнить значения для 2d-вектора, вы можете сделать что-то вроде:

for (int i = 0; i < rows; i++) {
  for (int j = 0; j < columns; j++) {
    in >> strings[i][j];
  }
}
person OGH    schedule 03.04.2013
comment
строки массива представляют строки файла, столбцы массива представляют каждый символ в строке - person B.O.; 03.04.2013
comment
С этим изменением у меня возникает следующая ошибка: невозможно преобразовать «std::vector‹char, std::allocator‹char› ›» в «size_t*» для аргумента «2» в «__ssize_t getline(char**, size_t*, ФАЙЛ*)' - person B.O.; 03.04.2013
comment
Не используйте vector<char>, используйте vector<string>. Кроме того, какое изменение вы внесли? - person OGH; 03.04.2013
comment
ВСЕМ СПАСИБО, Я РЕШИЛ - person B.O.; 05.04.2013

Как рекомендует OGH, я бы использовал std::vector<std::string> strings; вместо vector<vector<char>> strings; и работал с getline заголовка строки:

getline(in, strings[i]);

person jcm    schedule 03.04.2013