Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

vab

Frischling

  • »vab« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Hamburg

Beruf: Kfz-Meister

  • Private Nachricht senden

1

11.01.2015, 12:18

" localtime " Fehlerausgabe, warum ??

Hallo,
jedesmal beim " Release / Debug " wird mir ein Fehler ausgegeben. Warum?
Es ist doch alles RICHTIG !!

Habe Microsoft Visual Studio Professional 2013

WER KANN HELFEN:

Danke im voraus.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        .....  
        time_t jetzt;
    struct tm jetztLokal;
    string tagFeld[7] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" };
        
    jetzt = time(NULL);
    cout << jetzt << endl;

    jetztLokal = *localtime(&jetzt);             // FEHLER
        // jetztLokal = localtime_s(&jetzt);        // FEHLER

    cout << setfill('0');
    cout << setw(2) << jetztLokal.tm_mday << ".";
    cout << setw(2) << jetztLokal.tm_mon << ".";
    cout << setw(2) << jetztLokal.tm_year + 1900 << " ";
    cout << setw(2) << jetztLokal.tm_hour << ":";
    cout << setw(2) << jetztLokal.tm_min << ":";
    cout << setw(2) << jetztLokal.tm_sec << endl;

    cout << tagFeld[jetztLokal.tm_wday] << endl;
    cout << jetztLokal.tm_yday + 1 << endl;
        .....


Fehlermeldung:

error 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.

Edit by dot: Code Tags eingefügt

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (11.01.2015, 12:37)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

11.01.2015, 12:27

In der Fehlermeldung steht doch genau, was Sache ist.
Was verstehst du daran nicht?
Und warum benutzt du nicht Google - dann hättest du schon längst eine Lösung gefunden?!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

11.01.2015, 12:35

Du hast wohl beim Erstellen des Projektes die Security Development Lifecycle (SDL) checks angewählt belassen, was dazu führt, dass diese Warning als Error gehandelt wird. Um die Warning abzuschalten braucht es einfach nur ein #define _CRT_SECURE_NO_WARNINGS vor dem #include der Standardheader. Am besten einfach in den Projekteigenschaften unter Preprocessor Definitions das Makro standardmäßig definieren.

PS: In Zukunft bitte Code Tags verwenden ;)

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

4

11.01.2015, 12:42

Am besten einfach in den Projekteigenschaften unter Preprocessor Definitions das Makro standardmäßig definieren.

Ich würde eher sagen, am Besten das tun, was in der Fehlermeldung steht und die entsprechende, neuere Funktion benutzen.

5

11.01.2015, 12:54

Die "neuere" Funktion ist allerdings nicht im Standard sondern Microsoft-spezifisch.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

11.01.2015, 13:35

Die "neuere" Funktion ist allerdings nicht im Standard sondern Microsoft-spezifisch.

exactly ;)

Im Allgemeinen sind Warnings natürlich immer zu beheben und niemals einfach stummzuschalten. Nur das hier ist einer der extrem seltenen Fälle, wo ich eine Ausnahme machen würde...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (11.01.2015, 13:45)


Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

7

11.01.2015, 14:39

Gerade wenn einem an Portabilität gelegen ist, sollte man jedoch "localtime" nicht nutzen. Und das obwohl "_CRT_SECURE_NO_WARNINGS" häufig zu nicht portablen Funktionen verweist, wie auch in dem Fall.

Der Grund liegt nämlich daran, dass "localtime" nur auf der Windows-Plattform threadsicher ist und threadlokalen Speicher nutzt. (Siehe MSDN bei "Remarks") Auf Linux hingegen ist die Funktion explizit nicht threadsicher und liegt nicht im Thread lokalen Speicher, was zu sehr schwer zu findenden Bugs führen kann. (Siehe Linux mal page bei "Notes")

Also ist in diesem Fall tatsächlich eigentlich eher noch "localtime_s" zu empfehlen, weil in einer Plattformübergreifendenumgebung zwar "localtime" vorhanden ist, aber eben paradoxerweise scheinbar außer auf Windows unsicher. Wenn man schließlich auch andere Betriebssysteme erreichen will, empfiehlt sich dort die Alternative "localtime_r" zu "localtime_s" auf Windows, aber niemals die Standardfunktion.

Da ich vermute, dass vab diesen Code weder auf andere Betriebssystem portiert noch Multithreading nutzen möchte, ist es für ihn letztendlich natürlich eigentlich egal, welche der Beiden Funktionen er verwendet. Er kann also theoretisch noch beide Wege gehen. ;)

vab

Frischling

  • »vab« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Hamburg

Beruf: Kfz-Meister

  • Private Nachricht senden

8

12.01.2015, 12:11

" localtime " Fehlerausgabe, warum ??

Hallo alle zusammen,
danke für alle Antworten, die mir zwar geholfen haben, aber auch nicht.

ich hatte schon alles Versucht und auch im net nachgesehen aber die Antwort nicht gefunden.

Habe *localtime // localtime_s // localtime_r // etc. Versucht aber immer die gleiche Fehlermeldung.

Das was geht ist die Ausschaltung, aber das will ich nicht.

Bei der Free-Version von Microsoft Visual Studio läuft das Programm, nur bei der gekauften Version nicht.

Hat einer noch eine Idee ??

Danke im Voraus.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

12.01.2015, 13:07

Wie bei der Free Version läuft es und bei der gekauften Version nicht? Mit welchen Visual Studio Versionen hast du es genau getestet? Hast du in beiden das selbe Projekt angelegt? Beim testen hast du genau den selben Code benutzt?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

10

12.01.2015, 13:15

Bist du sicher, dass du alles neu kompiliert hast? (Kann leichter passieren als man denkt)
Wie sieht dein Code mit "localtime_s" aus?

Werbeanzeige