Debug Assertion failed bei ungültigem Formatzeichen mit strftime



  • Hi,

    ich habe hier gerade was komisches unter Visual Studio 2010 entdeckt. Wenn ich ein ungültiges Formatzeichen wie %N übergebe, stürzt mir das Programm mit einer Debug Assertion failed Meldung ab. Ich hätte eher erwartet, dass ein nicht bekanntes Formatzeichen einfach so weitergegeben wird 😕

    Hier mal ein Schnipsel zum Testen. Lasse ich %N weg, so funktioniert alles wie es soll:

    #include <iostream>
    #include <time.h>
    
    using namespace std;
    
    int main()
    {
        const int MAX = 64;
        char _buffer[MAX];
        time_t _time;
        struct tm *_info;
    
        _time = time(NULL);
        _info = localtime(&_time);
    
        strftime(_buffer, MAX, "[%Y-%m-%d %N %H:%M]",_info);
    
        cout << _buffer << endl;
    
        cin.get();
        return 0;
    }
    


  • Was erwartest du? Es ist VC++ 🙄



  • MSVC kennt kein %N. Sollte es das geben?
    MSVC kennt:

    case('a'):
            case('A'):
            case('b'):
    
            case('B'):
    
            case('c'):
            case('d'):
    
            case('H'):
            case('I'):
    
            case('j'):
            case('m'):
            case('M'):
            case('p'):
    
            case('S'):
    
            case('U')
    
            case('w'):
    
            case('W'):
    
            case('x'):
    
            case('y'):
    
            case('Y'):
    
            case('Z'):
            case('z'):
    
            case('%'):
    
            case('\004'):
            case('\015'):
    


  • Sorry, jetzt hab ich den wichtigsten Teil weggelasse:

    default:                /* unknown format directive */
                /* ignore the directive and continue */
                /* [ANSI: Behavior is undefined.]    */
                _ASSERTE( ( "Invalid format directive" , 0 ) ); // <---------
                return FA
    


  • Ah ok alles klar, danke. Nein es sollte %N nicht geben, ich hatte nur beim Testen mal nicht bekannte Formatzeichen genommen um zu schauen wie die Funktion reagiert. Eigentlich hätte sie 0 zurückgeben müssen, aber Microsoft war dann wohl doch schneller^^


Log in to reply