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^^