Хотя я могу ошибаться, так как вы сказали, что число разделено табуляцией / пробелом, я готов быть на самом деле это ASCII-данные, а не необработанные двоичные данные.Поэтому лучший способ работы со значением с плавающей запятой - использовать operator>>
для объекта ifstream
, а затем вставить его в double
.Это сделает автоматическое преобразование входного значения в двойное, где то, что вы сделали, будет просто копировать символьные байты, которые составляют значение с плавающей запятой, но сами по себе не являются значением с плавающей запятой.Кроме того, если вы пытаетесь вывести свой буфер как строку, вы явно не завершаете его нулем, поэтому он будет продолжать считывать стек до тех пор, пока он не встретит нулевой терминатор или вы не получите ошибку сегментации из-за доступа к памятиОС не позволяет вам получить доступ с вершины стека.Но в любом случае, в конце концов, ваш буфер не будет представлением типа данных double
.
Так что у вас будет что-то вроде:
double my_double_val;
ifs.open (filename.c_str());
if (ifs)
{
ifs >> my_double_val;
}
else
{
cerr << "Error opening file" << endl;
}
ifs.close();
cout << "Double floating point value: " << my_double_val << endl;