Warnings eliminieren, 2 Warnings bekomme ich nicht raus. Wer weiß weiter?



  • Mal wieder ich 🙂

    ich wollte in meinem Programm alle WARNINGS eliminieren, allerdings komme ich bei den Letzten 2 nicht weiter. Wäre super wenn mir jm. helfen könnte

    Danke Fill
    ______________________________________

    1.Warning C4244: 'Initialisierung': Konvertierung von 'std::streamoff' in 'long', möglicher Datenverlust [6]

    Die Länge "lenght" benötige ich später um die Größe von Dateien zu vergleichen

    long int groesse()														// Dateigrößenbestimmung
    {
    	ifstream in ("test.txt");
    
    	in.seekg (0, ios::end);												// Pointer an Anfang u Ende
    	long int length = in.tellg ();										// Errechnet die Differenz => Größe
    
    	return length;
    }
    

    **2. Warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. [6]
    **
    Benutze ich an der Stelle aber "localtime_s" sagt er das keine Argumente übergeben werden können...hm...

    string dateiname ()														// Dateinamengenerierung mit Datum
    {
    	 ostringstream oss;
    
    	 time_t result = time(NULL); 
    	 tm *dat = localtime(&result);										// Zugriff auf die Member der Time-Struktur über *dat
    
    	 oss << dat->tm_mday <<"-"<< dat->tm_mon+1 <<"-"<< dat->tm_year+1900 << "_"<< dat->tm_hour <<"h-"<< dat->tm_min <<"m-"<< dat->tm_sec << "s"<<".txt";
    	 string name = oss.str();
    	 return name;
    }
    


  • die erste Warnung liegt wohl daran, dass std::streamoff für deinen Compiler grösser ausgelegt ist?

    Wäre das evtl. eine Alternative?

    std::streamoff groesse()                                                        // Dateigrößenbestimmung 
    { 
        ifstream in ("test.txt"); 
    
        in.seekg (0, ios::end);                                                // Pointer an Anfang u Ende 
        std:streamoff length = in.tellg ();                                        // Errechnet die Differenz => Größe 
    
        return length; 
    }
    

    siehe auch hier:
    http://en.cppreference.com/w/cpp/io/streamoff



  • Zur zweiten Warnung:

    Compiler schrieb:

    To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. [6]



  • Dir ist bewusst, das localtime_s andere Parameter und Rückgabewerte hat?



  • Quisslich schrieb:

    Wäre das evtl. eine Alternative?

    Leider kommt fast die gleiche Meldung bei einsatz von streamoff



  • DirkB schrieb:

    Dir ist bewusst, das localtime_s andere Parameter und Rückgabewerte hat?

    nein war ich mir leider nicht bewusst, da habe ich wohl zu flabsig nachgelesen...DANKE..ich schaue gleich noch einmal nach...bin noch nicht so fit in c++ da überließt man schnell mal was:)



  • FillColin schrieb:

    Leider kommt fast die gleiche Meldung bei einsatz von streamoff

    Fast die gleiche Meldung != die gleiche Meldung.

    Wie ist denn die "fast gleiche" Meldung?

    HINWEIS: Wenn Du ein portables Programm schreiben möchtest, verwendest Du localtime_s NICHT.



  • LordJaxom schrieb:

    HINWEIS: Wenn Du ein portables Programm schreiben möchtest, verwendest Du localtime_s NICHT.

    .. und schreibst am besten einen bösen Brief an MS und fragst warum solche idiotischen Warnungen per default enabled sind.
    Kurt



  • Zur ersten Warnung:
    Mit static_cast lässt sich die einfach "entfernen".
    Aber Vorsicht: Du solltest eventuell vorher prüfen, ob der Wert von std::streamoff auch wirklich in deinen long int reinpasst, und eventuell entsprechend reagieren.
    Oder du verwendest durchgehend std::streamoff, wie schon vorgeschlagen wurde.

    Zur zweiten Warnung:
    Die ..._s Funktionen (da gibt's einige davon) sind eine Spezialanfertigung von MS, die vor Fehlern schützen sollen.
    Mehr dazu:
    http://msdn.microsoft.com/de-de/library/8ef0s5kh(v=vs.80).aspx
    http://msdn.microsoft.com/de-de/library/ms175759(v=vs.80).aspx



    1. streamoff sollte man nicht durch das Programm reichen, weil das nicht unbedingt ein Alias für einen Integer-Typ ist. streamsize ist das aber:
    std::streamsize groesse()                                                        // Dateigrößenbestimmung
    {
        ifstream in ("test.txt");
    
        in.seekg (0, ios::end);                                                // Pointer an Anfang u Ende
        const std::streamsize length = in.tellg ();                                        // Errechnet die Differenz => Größe
    
        return length;
    }
    

Anmelden zum Antworten