Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » funktion

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
10.10.2003, 15:04 Uhr
geissbock



hi!


C++:
static char *
native_path_sep(char *path)
{
#ifdef WIN32
   char *ptr;
   if (path == NULL)
      return path;
   if ((path = ptr = strdup(path)) == NULL)
      panic(errno, "malloc failed", NULL);
   while (*ptr++)
      if ('/' == *ptr)
     *ptr = '\\';
#endif
   return path;
}


so sieht die funktion aus.
1.frage: die erste if-anweisung ist doch ein wenig sinnlos oder? nur wenn path 0 ist dann soll er zurückgegeben werden! da steckt für mich keine logik hinter.
2.frage: zweite if-anweisung. ((path = ptr = strdup(path)) == NULL)
was soll das für einen hintergrund haben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.10.2003, 15:17 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zu 1)
der trick bei der sache ist das der rest der funktion nicht bearbeitet wird sondern die funktion gleich zu ende ist. Ist von der Art her ähnlich einem goto

zu 2)
in dieser bedinung macht du erst 2 zuweisungen und vergeleichst diese dann mit Null.
Der sinn dabei ist das path und und ptr beider auf den gleichen "punkt" zeigen und du den pfad erst kopierst, damit der alte nicht überschrieben wird
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.10.2003, 15:23 Uhr
geissbock



ok. zweitens habich eigentlich kapiert. aber was heißt den 'path==NULL'? ist das nicht nur wahr wenn path leer ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.10.2003, 15:30 Uhr
virtual
Sexiest Bit alive
(Operator)


@geissbock
leer != leer

Es gibt zwei "Leeren":

1. path ist ein leerer String. Dann Zeigt path auf einen Speicher, wo dieser Leere String steht. Ein leerer String beansprucht immerhin genau 1 char Speicherplatz, nämlich für ein 0 Byte, welche diesen Leeren String begrenzt. Die Abfrage strlen(path)==0 fragt einen solchen Fall ab.

2. Path ist ein NULL Pointer. Dann Zeigt path einfach niorgendwohin. Die Abfrage path==NULL fragt einen solchen Fall ab.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.10.2003, 15:40 Uhr
geissbock



leer != leer !!!!!!!!
dann wäre ja auch 5 != 5. das muss ich mal meinem mathe prof sagen.

aber was bringt es wenn er nirgentwo hin zeigt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.10.2003, 16:26 Uhr
virtual
Sexiest Bit alive
(Operator)


Es sind einfach unterschiedliche Informationen. Nehmen wird mal an, Du hast eine Konfigurationsdatei so ala Windows ini File:

Code:
[Windows]
EnableBugs = yes
LetUserWait = 500
ExeExtensions = exe,com,bat
[Linux]
LetUserWait = 0
ExeExtensions =


Ein programm Welches nun die Konfiguration einmal für die Section Windows ausliest, wird also nun Drei Settings finden (alle nicht leer). Nun soll das Programm die Section "Linux" vergleichen. Es stellt fest, daß "EnableBugs" nicht vorhanden ist. Das ist was anderes als ein "no" oder "", es wird einfach keine Aussage dazu getroffen. Hier würde man typischerweise ein NULL Pointer zurückgeben um zu sagen: "Keine Ahnung, dieses Setting ist nicht vorhanden. Lieber Aufruferm denke dir bitte selber einen Sinnvollen Defaultvalue (zb "no" an) aus".
Bei ExeExtensions würde es feststellen: Das Setting ist gesetzt; die Aussage ist also klar und deutlich: "Es gibt keine ExeExtensions unter Linux".
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.10.2003, 10:49 Uhr
geissbock



ok. das ergibt einen sinn!

aber um noch mal auf den code zurückzukommen:

C++:
if (path == NULL)
      return path;



wieso sollte ich den abfragen ob es ein nullpointer ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.10.2003, 10:52 Uhr
geissbock



noch mal zu meiner zweiten frage:

die zuweisung von path und ptr wird auf jeden fall gemacht? oder nur wenn die if anweisung durchlaufen wird?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.10.2003, 12:45 Uhr
virtual
Sexiest Bit alive
(Operator)


@geissbock
Wird immer ausgeführt, dh path und ptr werden beide auf den Rückgabewert von strdup gesetzt, unabh. davon, ob es nun NULL oder sonstwas war
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.10.2003, 13:03 Uhr
geissbock



thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: