Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
problem mit error(int,...)

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
dwax



Anmeldungsdatum: 14.06.2001
Beiträge: 65

BeitragVerfasst am: 23. Jan 2003 8:01   Titel: problem mit error(int,...)

hallo,

wollte eine generelle fehlerbehandlung für ein kleines programm schreiben:
code:

void error(int need_to_exit, ... ){
va_list ap;
va_start(ap,need_to_exit);

for(;Wink{
char *next_msg = va_arg(ap,char *);
if(next_msg)
cerr << next_msg;
else
break;
}

va_end(ap);

cerr << endl;

if(need_to_exit)
exit(need_to_exit);
}



beim folgende aufruf error(1,"Usage: ",argv[0]," <start_file>");
kommt aber leider nicht "Usage: prog <start_file>" sondern
Usage: ./bla <start_file>ZY‡$¸üÿ¿AU
@ŒO@Pè¡ùÿÿ‹$ÃU‰åƒì
WVSèîÿÿÿÃ&Segmentation fault

müßte nicht nach dem letzten parameter char *next_msg = va_arg(ap,char *) == 0 sein und dann bei
code:

void error(int need_to_exit, ... ){
va_list ap;
va_start(ap,need_to_exit);

for(;Wink{
char *next_msg = va_arg(ap,char *);
if(next_msg)
cerr << next_msg;
else
break;
}

va_end(ap);

cerr << endl;

if(need_to_exit)
exit(need_to_exit);
}


der else zweig ausgeführt werden, der die schleife beendet?

greets Dirk
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

dwax



Anmeldungsdatum: 14.06.2001
Beiträge: 65

BeitragVerfasst am: 25. Jan 2003 13:23   Titel: Re: problem mit error(int,...)

habs!

wenn der aufruf so aussieht
code:

error(0,"a","b",NULL);


gehts

greets Dirk
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

Krümelkacker
Gast





BeitragVerfasst am: 26. Jan 2003 3:25   Titel: Re: problem mit error(int,...)

...
if(next_msg)
...

Unsauberes C! NULL ist nicht auf allen Systemen 0!!!
(Anderwo heißt es deshalb auch besser NIL.)
 

Jochen
Gast





BeitragVerfasst am: 26. Jan 2003 10:43   Titel: Re: problem mit error(int,...)

*bzzzzzt* Wrong!

Siehe C-FAQ, Punkt 5.3 (leider nur auf Englisch): http://www.eskimo.com/~scs/C-faq/q5.3.html

Kurz auf deutsch zusammengefasst:

"if (p)" ist nur eine Kurzschreibweise für "if (p != 0)". Aus dem Vergleichskontext erkennt der Compiler einwandfrei, dass der Vergleich mit dem Null-Pointer geschieht. Egal, wie die Architektur aussieht: 0 an einen Pointer zugewiesen (oder damit verglichen) ist immer der NULL-Pointer, auch wenn die interne Repräsentation ungleich "alle Bits gleich 0" ist!

Ob das nun guter Stil oder schlechter Stil ist, steht allerdings zur Debatte frei.

Jochen
 

Krümelkacker
Gast





BeitragVerfasst am: 26. Jan 2003 23:57   Titel: Re: problem mit error(int,...)

Ist halt nicht ganz sauber, das C. Wie bekomme ich nun einen Pointer auf die Adresse 0 hin?
etwa
P = 1;
--P;
???
 

dwax



Anmeldungsdatum: 14.06.2001
Beiträge: 65

BeitragVerfasst am: 27. Jan 2003 7:22   Titel: Re: problem mit error(int,...)

if(next_msg) ist auf jedem system gleich if(next_msg != 0).
ein pointer auf 0 (0x0) ist auf jedem (mir bekannten) system gleich NULL/NIL/null oder wie es auch immer heißt ...

über den stil läßt sich aber streiten

BTW P=1;P--; ergibt P==0, nicht &P == 0!

greets Dirk
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

IchBins
Gast





BeitragVerfasst am: 27. Jan 2003 7:50   Titel: Re: problem mit error(int,...)

> beim folgende aufruf error(1,"Usage:
> ",argv[0]," <start_file>");
> kommt aber leider nicht "Usage: prog
> <start_file>" sondern
> Usage: ./bla <start_file>ZY‡$¸üÿ¿AU
> @ŒO@Pè¡ùÿÿ?????????‹$ÃU‰åƒì
> WVSèîÿÿÿ?Ã&?Segmentation fault

Um mal auf das ursprüngliche Problem zurück zu kommen: Ich vermute, die Ursache für den SegFault ist dieses argv[0] in error(). Was ist in dem Dingens denn drin, wenn das Programm ohne Parameter aufgerufen wird?
 

dwax



Anmeldungsdatum: 14.06.2001
Beiträge: 65

BeitragVerfasst am: 29. Jan 2003 11:50   Titel: Re: problem mit error(int,...)

argv[0] ist der name des programms, zb ./prog oder /home/otto/prog, jenachdem, wie du es aufrufst ...

hab aber in der glibc doku die antwort gefunden, siehe post vom 25 jan.
ich war nur halt immer der meinung, dass va_args NULL liefern würde, wenn alle parameter übergeben sind.

greets Dirk
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy