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

herzogRed

Frischling

  • »herzogRed« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

1

01.06.2015, 22:32

Kapitel8 mit Dev c++ Fehler mit fopen_s

Hallo Leute,

Kennt siech hier jemand mit Dev c++ aus?

Ich habe da das Problem, das die Funktion fopen_s nicht geht.

ich bin zu bei Kapitel 8 im Buch wo es um Das Logfile geht. Ich hätte es gerne zum laufen bekommen, aber weiß nicht wie.

Ich arbeite mit Dev c++, da ich unterwegs mit meinem Windows Tablet, nicht MS VS Express nutzen kann.

ich hab schon paar Tage im Netz nach einer Lösung gesucht, aber nix gefunden. Bin halt blutiger Anfänger.

Gruß Mike

2

02.06.2015, 05:28

Etwas Code könnte helfen dein Problem zu lösen!
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

02.06.2015, 06:20

Was heißt denn "geht nicht"? Es muss ja irgendeine Meldung geben.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

herzogRed

Frischling

  • »herzogRed« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

4

02.06.2015, 07:12

Moin,
sry hab nicht soweit gedacht. hier der Ausschnitt wo fopen_s drin ist.

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
23
24
void CLogfile::CreateLogfile (const char *LogName)
{
    // Logfile leeren und Kopf schreiben
    fopen_s (&m_Logfile,  LogName, "w");
    Textout ("<html><head><title>Logfile</title></head>");
    Textout ("<body><font face='courier new'>");
    WriteTopic ("Logfile", 3);

    // Aktuelle Build-Konfiguration ausgeben
#ifdef _DEBUG
    Textout ("BUILD: DEBUG<br>");
#else
    Textout ("BUILD: RELEASE<br>");
#endif

    // Link für E-Mail-Adresse schreiben
    Textout ("<a href='mailto:support@meineURL.de?subject=Logfile'>");
    Textout ("Send E-Mail to me</a><br><br>");

    // Logfile schließen und mit append wieder öffnen
    fclose (m_Logfile);
    fopen_s (&m_Logfile, LogName, "a");

} // CreateLogfile

hier noch die .hpp

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#ifndef __CLOGFILE
#define __CLOGFILE

// Includes
//
#include <windows.h>
#include <stdio.h>
#include "Singleton.hpp"

// Defines
#define MAX_BUFFER 1024             // Maximale Größe für den Buffer
#define L_FAIL false                // Funktion war erfolgreich
#define L_OK   true                 // Funktion ist fehlgeschlagen
#define g_pLogfile CLogfile::Get () // Makro zur einfachen Verwendung

// Farben für den Text
enum FONTCOLORS
{
    BLACK,
    RED,
    GREEN,
    BLUE,
    PURPLE
};

// Klassendeklaration
//
class CLogfile : public TSingleton<CLogfile>
{
    // Memberfunktionen
    public:

        CLogfile       ();
        ~CLogfile      ();
        void CreateLogfile  (const char *LogName);
        void WriteTopic     (const char *Topic, int Size);
        void Textout        (const char *Text);
        void Textout        (int Color, const char *Text);
        void Textout        (int Color, bool List, const char *Text);
        void fTextout       (const char *Text, ...);
        void fTextout       (int Color, const char *Text, ...);
        void fTextout       (int Color, bool List, const char *Text, ...);
        void FunctionResult (const char *Name, bool Result);

    // Membervariablen
    private:

        FILE *m_Logfile;

};

#endif

hier die Fehlermeldung:
31 36 C:\...\Logfile.cpp [Error] 'fopen_s' was not declared in this scope
keine Ahnung ob man damit was anfangen kann. ansonsten ist die code direkt aus der Datei zum buch.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

02.06.2015, 07:31

Nun, dann ist fopen_s() wohl eine VC-spezifische Funktion. Du kannst das sicher auf fopen() umbauen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Tobiking

1x Rätselkönig

  • Private Nachricht senden

6

02.06.2015, 08:49

Die _s Funktionen sind als optional im C11 Standard definiert. Die gcc und glibc Entwickler scheinen ziemliche Gegner davon zu sein und bauen die Funktionen bewusst nicht ein. Mich würde wundern wenn der MingW die Funktionen drin hat.

Wie BlueCobold aber gesagt hat, einfach die Funktionen ohne _s nutzen.

herzogRed

Frischling

  • »herzogRed« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

7

02.06.2015, 23:15

Hallo,
mit fopen hatte ich schon getestet, da kommt folgende Fehlermeldung, die ich nicht verstehe, oder nicht weiss was ich da ändern kann:
31 34 C:\...\Logfile.cpp [Error] cannot convert 'FILE** {aka _iobuf**}' to 'const char*' for argument '1' to 'FILE* fopen(const char*, const char*)'
Gruß Mike

8

03.06.2015, 05:49

Naja im Prinzip steht es ja da.
Angeblich ist dein erstes Argument in der Funktion fopen nicht vom typ 'const char*' sondern vom type 'FILE**'.

Du kanst auch mal feste Werte ausprobieren also

C-/C++-Quelltext

1
fopen ("Mein.File", "r");


Edit: sehe gerade m_logfile ist vom Type FILE* das geht dann natürlich nicht wenn du den übergibst als Parameter.
Der Rückgabe Type von fopen ist dann FILE*.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Koschi« (03.06.2015, 05:56)


herzogRed

Frischling

  • »herzogRed« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

9

03.06.2015, 09:08

Ok, das heißt jetzt was?

Es war wohl nicht die Lösung des Problems, oder?

das mit dem File hab ich auch schon mitbekommen, nur was mache ich damit? Muss ja ne Lösung geben, wenn Dev cC++ nicht damit zurecht kommen sollte.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

10

03.06.2015, 09:21

Es ist die Lösung des Problems. Nur ist die Signatur von fopen anders als von fopen_s. Wenn du nur fopen_s durch fopen ersetzt passen die Parameter nicht. Genau das sagt dir die Fehlernachricht.

C-/C++-Quelltext

1
2
3
errno_t fopen_s(FILE** pFile, const char *filename, const char *mode);

FILE * fopen(const char * filename, const char * mode);


Bei fopen_s wird dein FILE* über einen Parameter zurückgegeben (deswegen der Doppelzeiger). Bei fopen wird FILE* über den Rückgabewert zurückgegeben und kommt daher auch nicht als Parameter vor. Den Aufruf solltest du entsprechend anpassen können.

Werbeanzeige