Данные не записываются в двумерный массив char'ов
Я пишу игру, и хочу сделать так, чтобы с файла считывались строки записывались в двумерный массив, и затем считывался массив и строилась карта. Но компилятор данный код не компилирует и выдает такую ошибку - C++ выражение должно быть допустимым для изменения левосторонним значением. Как сделать чтобы данный код скомпилировался либо поменять его? Вот код:
std::ifstream file("maps/map.txt");
char Map[35][66];
int main()
{
char line[66];
for (int i = 0; i < 35; i++)
{
file >> line;
Map[i] = line;
}
}
Ответы (2 шт):
Map[i] - это одномерный массив char на 66 элементов. line является тем же. В строке
Map[i] = line;
Вы пытаетесь присвоить один массив другому. Так делать нельзя. Нужно в цикле скопировать данные из одного массива в другой:
for (int i = 0; i < 35; i++)
{
file >> line;
for (int j = 0; j < 66; j++)
{
Map[i][j] = line[j];
}
}
Но так как у Вас массив char, то можно использовать функцию strcpy из cstring
for (int i = 0; i < 35; i++)
{
file >> line;
strcpy(Map[i], line);
}
Или же вообще обойтись без дополнительного массива и читать сразу в Map:
for (int i = 0; i < 35; i++)
{
file >> Map[i];
}
Оператора присваивание для массивов нет. Есть возможность это сделать если массив сделать элементом структуры.
# include <fstream>
std::ifstream file("maps/map.txt");
struct MapLine {
char line [ 66 ] ;
} ;
MapLine Map [ 35 ] ;
int main()
{
MapLine line ;
for (int i = 0; i < 35; i++)
{
file >> line . line ;
Map [ i ] = line ;
}
}