std :: stoi приводит к segfault - PullRequest
       17

std :: stoi приводит к segfault

0 голосов
/ 09 апреля 2019

У меня есть следующая тестовая программа:

#include <string>
int main(int argc, char* argv[]) {
    try {
        return std::stoi("3000127232");
    }
    catch (...) {
        return 0;
    }
}

Когда я компилирую это в Ubuntu с C ++ 11 и запускаю код, я получаю возвращаемое значение 0. Это то, что я ожидаю, потому что значение в строке выходит за пределы диапазона.

Но когда я компилирую его для rasperry-buildroot 18.11, я могу запустить программу на rasperry, но у меня возникает ошибка. Этого я не ожидаю.

Есть ли другое решение для преобразования строк в целые (без ошибок по умолчанию, когда они находятся вне диапазона), или у кого-то есть другая идея?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Возможно, вы захотите проверить размер int на вашей малине, возможно, он выходит за пределы диапазона.

1 голос
/ 09 апреля 2019

std::stoi указано, чтобы выдать исключение, если значение выходит за пределы диапазона. Если реализация не может этого сделать, значит, она не соответствует стандарту. Это может быть ошибка компилятора.

Если, например, вы нацелены на систему, которая не поддерживает исключения или по какой-то другой причине не соответствует требованиям, существуют другие способы преобразования строки в целое число, в котором не используются исключения, например std::strtol.

...