isapsha() Debug Assertion Failed



  • Hallo 🙂
    Ich habe ein Vokabeltrainer geschrieben und immer wenn ich die Fkt zum einlesen aus einer .txt Datei aufrufe kommt: "Debug Assertion Failed! File: ...\isxtype.c Line:56
    Expression: c>= -1 && c<= 255

    Hier die Fkt:

    void read(Vokabel& V, std::fstream& f)
    {
    	std::string s;
    	std::string m;
    
    		getline(f,s);
    
    		if(!isalpha(s[0]) || s.length() == 0)
    		{
    			getline(f,s);
    		}
    
    		if(isalpha(s[0]))
    		{
    		m = s.substr(0,s.find_first_of("-"));
    		V.setSprache(m);
    
    		s = s.substr(s.find_first_of("-")+1);
    		V.setUebersetzung(s);
    		}
    }
    

    Kann mir jmd sagen woran das liegt?
    Danke 🙂



  • Wenn s.length() == 0 ist, wird s[0] wohl nichts sinnvolles liefern. Tausche die Test in der Bedingung.



  • Vielen Dank 🙂
    Hab das jetzt geändert aber der Fehler besteht immer noch -.-



  • Es liegt vermutlich daran, dass die cctype-Funktionen besch***ene Schnittstellen haben:

    int isalpha( int ch );
    

    Wie du siehst, steht da int und nicht char. Dazu kommt die Forderung, dass dieser int im Wertebereich von unsigned char liegt oder EOF ist. Das heißt, falls char vorzeichenbehaftet ist, ist die Hälfte der Werte negativ und damit außerhalb des gültigen Wertebereiches. ➡

    isalpha(static_cast<unsigned char>(s[0]))
    

    Was manni sagt ist außerdem richtig.



  • Vielen Dank jetzt läufts 🙂


Log in to reply