fopen_s ?
-
Nach der Konvertierung meines VC++ 6.0 MFC Projektes nach VS 2008 Standard,
kommen verschiedene Warnungen.
z.B: fopen soll nun fopen_s, fscanf fscanf_s heissen ...
Was ist der Unterschied ? Kann man darauf verzichten ?
-
Die sicheren Funktionen sind z.B. bei foldendem Szenario sinnvoll:
char s[5]; sprintf(s,"1234567890"); //Schlecht! Es wird mehr kopiert, als eigentlich Platz da ist. Informiert wirst du darüber nicht, höchstens indirekt, wenn es irgendwann kracht. sprintf_s(s,5,"1234567890"); //du kriegst ne Meldung, dass der Puffer zu klein istWenn dich die Warnungen stören, kannst du _CRT_SECURE_NO_WARNINGS definieren, dann werden die nicht ausgegeben.
-
Bei dem Szenario koennte man auch einfach snprintf nehmen. Aber das wird, wenn ich das hier richtig mitbekommen habe, von neueren VC++-Versionen auch angewarnt.
-
SG1 schrieb:
Bei dem Szenario koennte man auch einfach snprintf nehmen. Aber das wird, wenn ich das hier richtig mitbekommen habe, von neueren VC++-Versionen auch angewarnt.
Ja, wird es. Vielleicht liegt es daran, dass snprintf, wenn man angibt, dass max. 5 Zeichen kopiert werden sollen, auch genau 5 'Nutzzeichen' und keine abschließende Null kopiert?