none
Fehler bei Open-Anweisung

    Frage

  • Hallo,

    muss nach längerer Zeit mal wieder etwas mit C++ programmieren.
    Ich möchte ein ganz normales File mit Text einlesen.

    Hier habe ich folgendes Beisspiel eingegeben:

    //--------------------------------------------------------------------------------

    #include<stdio.h>#include"stdafx.h"int main(void) {     FILE *datei;     char text[100 + 1];     datei = fopen("testdatei.txt""r");     if (datei != NULL)     {         fscanf(datei, "%s", text); /* %c Für einzelne Zeichen %s Für eine Zeichenkette*//* String muss mit Nullbyte abgeschlossen sein */         text[100] = '\0';         printf("%s\n", text);         fclose(datei);     }     return 0; }  

    //-------------------------------------------------------------------------   

    Wenn ich hier nun kompiliere bekomme ich folgende Meldung:

    Schweregrad    Code    Beschreibung    Projekt    Datei    Zeile
    Fehler    C4996    'fopen': This function or variable may be unsafe.
    Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
    See online help for details.    

    Hat jemand eine Idee?

    Gruß

    Berni

                                      
    Dienstag, 8. November 2016 12:54

Alle Antworten

  • Hallo Berni,

    Microsoft hat für seine Umgebung diverse "Verbesserungen" eingeführt, um die allgegenwärtigen Fehlerquellen wie Null Pointer, Puffer-Unter- und Überläufe usw. zu reduzieren, deren Auswirkungen wir durch die allmonatlichen kritischen und weniger kritischen Updates seitens Microsoft uvm. mitbekommen.

    Für den Anfang kann man darauf auch verzichten, vor allem wenn man die Basics plattformunabhängig einüben möchte, dazu: Remove secure warnings (_CRT_SECURE_NO_WARNINGS) from projects by default in Visual Studio

    In einem weiteren Schritt solltest Du Dich damit beschäftigen, wenn Deine Programme stabil(er) werden sollen, siehe dazu: Sicherheitsfunktionen in der CRT.

    Gruß Elmar

    • Als Antwort vorgeschlagen David Roller Montag, 28. November 2016 20:23
    Dienstag, 8. November 2016 14:39
  • Halle Berni,

    Elmar Boye hat schon sehr gut erklärt woher die Fehlermeldung kommt.

    Du hast in deiner Frage geschrieben, dass du etwas C++ programmieren willst.

    Deshalb wollt ich noch hinzufügen, dass dein Programm eher "C style" ist wie C++.

    In C++ würde ich es eher wie folgt schreiben:

    #include <fstream>
    #include <string>
    
    int main()
    {
        std::ifstream file("testdatei.txt");
        std::string str((std::istreambuf_iterator<char>(file)),
            std::istreambuf_iterator<char>());
        return 0;
    }

    Damit hättest du auch die Fehlermeldung nicht mehr.

    Gruß,

    David

    Montag, 28. November 2016 20:23