Giddion Skrevet 1. august 2005 Del Skrevet 1. august 2005 Jeg holder på med en console klasse som man ved hjelp en string table og va_list lager en string som brukeren kan lese og det fungerer greit helt til jeg prøver og sende string via variable argument systemet i va variablen (....) laster jeg en char* void console::PrintErrorline(int Error, ...) { char* newLine = new char[255]; //variable til den ferdige feil stringen char* cError = new char[256]; //variable til stringen hentet fra sting table LoadString(hInstance, ProgError, cError, 256); //laster stringen "Feil ved lasting av %s" inn i cError va_list ap; va_start(ap, cError); vsprintf(newLine, cError, ap); // her feiler programmet va_end(ap); .............// mere kode } til informasjon bruker jeg vs7 Den egentlige feilen skjer i output.c "får ikke lov til å lese 0xcccc" jeg har prøvd å bruker %S å bare få en char ut og det funket jeg har også kikket igjenom etter rare pointere og har ikke funnet noen. stringe lastes riktig fra string listen. Takker for all hjelp Lenke til kommentar
GeirGrusom Skrevet 2. august 2005 Del Skrevet 2. august 2005 (endret) er va og ap det samme? Det må nesten ligge i argument pointeren feilen ligger... Endret 2. august 2005 av GeirGrusom Lenke til kommentar
JBlack Skrevet 2. august 2005 Del Skrevet 2. august 2005 Kjenner ikke til dette va_list greiene, men en åpenbar mulighet for feil her er at en av char strengene newLine og cError ikke er terminerte. Lenke til kommentar
kattemat Skrevet 2. august 2005 Del Skrevet 2. august 2005 (endret) Så vidt jeg kan huske, så skal parameter 2 til va_start være en peker til den siste "faste" parameteren. Eksempel(unnskylder meg atter en gang for Linux-C kode): int sprintf_wrapper(char *buf, char *format, ...) { int ret; va_list arglist; va_start(arglist, format); ret = vsprintf(buf, format, arglist); va_end(arglist); return ret; } [edit: bytta til sprintf og la til retur ] Endret 2. august 2005 av kattemat Lenke til kommentar
Giddion Skrevet 3. august 2005 Forfatter Del Skrevet 3. august 2005 Jepp det fiksa biffen kattemat takker for alle svar her er koden hvis noen vil se void PrintErrorLine(int ProgError, ...) { char* newLine = new char[255]; char* cError = new char[255]; LoadString(hInstance, ProgError, cError, 256); va_list ap; va_start(ap, ProgError); vsprintf(newLine, cError, ap); va_end(ap); if(strcmp(m_cHistory.front(),newLine)) { if (m_cHistory.size() == m_iHistory) m_cHistory.pop_back(); m_cHistory.push_front (newLine); } } Lenke til kommentar
krakow1905 Skrevet 3. august 2005 Del Skrevet 3. august 2005 Jeg holder på med en console klasse som man ved hjelp en string table og va_listlager en string som brukeren kan lese og det fungerer greit helt til jeg prøver og sende string via variable argument systemet i va variablen (....) laster jeg en char* void console::PrintErrorline(int Error, ...) { char* newLine = new char[255]; //variable til den ferdige feil stringen char* cError = new char[256]; //variable til stringen hentet fra sting table LoadString(hInstance, ProgError, cError, 256); //laster stringen "Feil ved lasting av %s" inn i cError va_list ap; va_start(ap, cError); vsprintf(newLine, cError, ap); // her feiler programmet va_end(ap); .............// mere kode } til informasjon bruker jeg vs7 Den egentlige feilen skjer i output.c "får ikke lov til å lese 0xcccc" jeg har prøvd å bruker %S å bare få en char ut og det funket jeg har også kikket igjenom etter rare pointere og har ikke funnet noen. stringe lastes riktig fra string listen. Takker for all hjelp for å sitere den legendariske kommentaren til Ken Thompson (vedkommende som designet den første stdarg.h filen(der va_list er definert)) i UNIX v6 kildekoden: "You are not expected to understand this" Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå