2016-03-22 11 views
0

Для проекта я хочу прочитать столбцы текстового файла в разных массивах. Сначала я прочитал файл в одном массиве 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()); 
} 
} 
+0

Лично я предпочитаю использовать 'std :: stoi()' вместо 'atoi()'. Попробуйте, возможно, это поможет вам – DimChtz

+0

'word' имеет для своего первого размера размер 50. Таким образом, вы можете обращаться к элементам только до' size - 1' (49). – Rakete1111

+1

Выражение '' 0,5 "' не является объектом, вы не можете использовать функцию-член на нем, поэтому это должно дать вам ошибку компилятора. Фактически, строковый литерал, такой как '' 0,5 "', даст вам указатель на первый элемент типа 'char const *', именно то, что 'atof' хочет, поэтому нет необходимости использовать какую-либо упаковку в' std :: string'. –

ответ

0

Я запустил отладчик, и я получил ошибку по индексу 0 с значением «7,701» и с последующей строкой.

напряжение [i] = atof (слово [50] [0] .c_str());