Странная ошибка std :: atof с g cc 7.4.0 - PullRequest
1 голос
/ 04 марта 2020

У меня странное поведение с std :: atof в Ubuntu 18.0.4 с Qt Creator (4.10) в качестве IDE / g cc 7.4.0:

Он анализирует строки как обычно, когда я запустить в режиме отладки из QtCreator. Но он работает нормально, когда я бегу.

Пример кода с таким поведением:

std::string exampleStr = "3.0303";
std::cout << "string value: " << exampleStr << std::endl;
std::cout << "double value - c_str(): " << std::atof(exampleStr.c_str()) << std::endl;

Вывод с нормальным запуском из IDE:

строковое значение: 3.0303

двойное значение - c_str (): 3

Вывод с запуском непосредственно из исполняемого файла:

строковое значение: 3.0303

двойное значение - c_str (): 3

Вывод в режиме отладки:

строковое значение: 3.0303

двойное значение - c_str (): 3.0303

Я пробовал и std :: stof, и std :: strtof. Оба одинаковые. Кто-нибудь знает причину или обойти эту ошибку?

Редактировать: Я обошел это, но все еще удивляюсь, почему это происходит.

std::string exampleStr = "3.0303";    
std::stringstream ss;
ss << exampleStr;
float val = 0;
ss >> val;
std::cout << "Float value: " << val << std::endl;

1 Ответ

1 голос
/ 04 марта 2020

Я изменил локаль с помощью этого:

std::setlocale(LC_ALL, "en_US.UTF-8");

, и он работал как для режима отладки, так и для режима запуска. По-прежнему интересно работать в режиме отладки, получая другую локаль, чем обычно. Спасибо за все ответы.

...