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 ist
    

    Wenn 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?


Anmelden zum Antworten