Для проекта я хочу прочитать столбцы текстового файла в разных массивах. Сначала я прочитал файл в одном массиве 2D-строк и разделил его на разные массивы int
или float
1D. Но когда я конвертирую числа в int
из float
с методом atof
или atoi
, у меня возникла ошибка сегментации. Есть ли у кого-нибудь другое решение?преобразовать 2d строковый массив в 1D float, int arrays
void Tftdiag::readFile(std::string file)
{
string testline;
char tab2[1024];
strcpy(tab2, file.c_str());
ifstream Test(tab2);
if (!Test)
{
cout << "There was an error opening the file.\n";
}
//store words in array
int x=0,y=0;
while(Test>>testline)
{
word[y][x]=testline;
x++;
if (testline=="")
y++;
}
//output whole array with array position numbers for each entry
cout<<"Array contents:\n";
for (int y=0;y<50;y++)
{
for (int x=0;x<6;x++)
cout<<word[y][x]<<"("<<y<<","<<x<<")"<<endl;
}
for(int i=0; i<50; i++) {
voltage[i]= atof("0.5".c_str());
//currentArray[i]= atof(word[50][1].c_str());
//lux[i]= ::atof(word[50][2].c_str());
//red[i]= atoi(word[50][3].c_str());
//green[i]= atoi(word[50][3].c_str());
//blue[i]= atoi(word[50][3].c_str());
}
}
Лично я предпочитаю использовать 'std :: stoi()' вместо 'atoi()'. Попробуйте, возможно, это поможет вам – DimChtz
'word' имеет для своего первого размера размер 50. Таким образом, вы можете обращаться к элементам только до' size - 1' (49). – Rakete1111
Выражение '' 0,5 "' не является объектом, вы не можете использовать функцию-член на нем, поэтому это должно дать вам ошибку компилятора. Фактически, строковый литерал, такой как '' 0,5 "', даст вам указатель на первый элемент типа 'char const *', именно то, что 'atof' хочет, поэтому нет необходимости использовать какую-либо упаковку в' std :: string'. –