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

1

15.11.2008, 17:52

[Erledigt] variable Parameterliste

Ich möchte gerne einen String mit verschiedenen Argumenten an eine Funktion weiterreichen.

Quellcode

1
logfile("[ERROR main] Datei %s konnte nicht geladen werden\n", filename);


Bis jetzt sieht das ganze so aus:

Quellcode

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
#include <stdio.h>
#include <stdarg.h>

using namespace std;

/* Globale Strukturen und Enumerationen */

/* Globale Variabeln und Konstanten*/
extern FILE *g_pLogfile;

/* Hilfe-Funktion für dieses Modul */

void logfile(const char* pFormat, ...)
{
    unsigned int length = 0;
    va_list args;
    char* pBuffer = NULL;

    va_start(args, pFormat);
    length = _vscprintf(pFormat, args) + 1;
    pBuffer = new char[length];

    vsprintf_s(pBuffer, length, pFormat, args);
    fprintf(g_pLogfile, pBuffer);

    //puts( buffer );
    delete[] pBuffer;
    va_end(args);
}


Das ganze lässt sich aber nicht kompilieren, da er _vscprintf als Funktion nicht kennt. Müsste er aber eigentlich. In der MSDN steh, das dafür lediglich stdio.h nötig ist, und diese ist eingebunden.

Ich benutze übrigens ein Mingw compiler - keine Ahnung ob es daran liegen kann.

Anonymous

unregistriert

2

15.11.2008, 18:37

das sollte man generell nicht mehr machen, da es fehleranfällig ist und man so recht schnell Lücken im Programm reinschustern kann für Angriffe.

Benutz lieber den operator << und vorallem: Keine globalen Variablen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

15.11.2008, 18:37

Vielleicht klappts ja mit vsnprintf.
@D13_Dreinig

4

15.11.2008, 18:50

Zitat von »"unsigned long"«

das sollte man generell nicht mehr machen, da es fehleranfällig ist und man so recht schnell Lücken im Programm reinschustern kann für Angriffe.

Benutz lieber den operator << und vorallem: Keine globalen Variablen.

Mist... Idemfall muss ich mir da was anderes einfallen lassen.
operator << sagt mir jetzt in diesem Zusammenhang nichts.
Kannst du mir näheres zu diesem Lösungsansatz verraten?

5

15.11.2008, 19:37

Streamoperator ... guck dir z.B. mal die Input u. Output-Streams im Standard an (std::ifstream, std::ofstream, std::cin, std::cout, usw.)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

7

15.11.2008, 23:15

Danke Leute, habs gebacken bekommen :->

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

8

16.11.2008, 11:25

Ich hab's selbst mehrmals vergessen, also ohne naeheren Grund:
Die Dinger heissen Variadic functions ;)
"Have you tried turning it off and on again?"

Werbeanzeige