все норм там, у тебя мб с кодировкой проблемы. сколько юзал регулярки не встречался с такими проблемами.std::regex не дружит с кириллицей
возможно что-то из структур SAMP, Info, pPool, pText3D или сам текст Text3D.pText являтся nullptr, из-за чего случается краш. стоит проверить что все структуры и текст не являются nullptr. А вообще лучше использовать регулярки тут, т.к. твое условие может сработать и при "123 Осталось 123", а не только при том что тебе надо. (строить регулярки удобно можно на regex101.com) так жеПочему краш?
C++:stTextLabel Text3D = SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i]; if (std::strstr(Text3D.pText, "Осталось")) { // Осталось 01:09 char min, sec; std::sscanf(Text3D.pText, "Осталось %s:%s", &min, &sec); SF->Log("Minute: %s | Second: %s", min, sec); }
std::sscanf
является небезопасной. вот тебе короткий пример по работе с регулярками.
C++:
constexpr auto pText = "Осталось 01:09";
std::cmatch cm;
std::regex re( R"(Осталось\s+(\d+)\:(\d+))", std::regex::icase );
if ( std::regex_match( pText, cm, re ) ) {
auto minutes = cm[1].str();
auto seconds = cm[2].str();
std::cout << "Minutes: " << minutes << " | Seconds: " << seconds << std::endl;
}
// Выведет: "Minutes: 01 | Seconds: 09"