2016-04-25 6 views
3

Ich habe diese einfache C++ Code mit RegExp auf Android stürzt ab, sondern arbeitet auf OS X fein:Sehr einfache C++ Code mit RegExp stürzt auf Android, aber funktioniert auf OS X

std::string str = "1x0-4x0"; 
std::regex regexRule("([0-9]+)x([0-9]+)-([0-9]+)x([0-9]+)"); 
std::smatch piecesMatch; 
if (std::regex_match(str, piecesMatch, regexRule)) 
    std::cout << "regex_match!\n"; 

Warum es zum Absturz? Verpasse ich etwas?

Es kompiliert ohne irgendwelche Warnungen.

GCC 4.8

+0

'\\ -' ==> warum? –

+0

Welche NDK verwenden Sie für Android? Welche GCC-Version? – marcinj

+0

@Thomas - wenn ich nur "\ -" verwende, bekomme ich eine Warnung in XCode: Unbekannte Escape-Sequenz '\ -' – JavaRunner

Antwort

2

Sie vermutlich mit gcc 4.8 NDK Version verwenden. Regex wurde offiziell angekündigt, seit gcc 4.9 unterstützt zu werden. NDK verwendet gcc 4.9 in den jüngsten Versionen, d.h. 11b.

auch hier sehen: Is gcc 4.8 or earlier buggy about regular expressions?

+0

Ich habe meinen NDK auf die aktuelle Version aktualisiert und verwende jetzt gcc-4.9 statt 4.8. Jetzt funktioniert es gut. Vielen Dank. – JavaRunner

+0

Tatsächlich wurde in NDK 11 gcc 4.8 entfernt und gcc 4.9 wird für alle Ziele verwendet. Aber 4.9 wie ich sehe war seit einiger Zeit verfügbar - wie ich seit NDK v. 10 sehe. – marcinj

3

frühe Version von gcc hat nicht die volle Unterstützung auf C++ 11. Sie könnten die Version in Ihrem NDK überprüfen.

gcc-4.8.5 auf CentOS 7

terminate called after throwing an instance of 'std::regex_error' 
    what(): regex_error 
Aborted (core dumped) 

gcc-5.2.1

regex_match! 
Verwandte Themen