Moin pl,
Eine 0 in
char *string = 0
ist völlig Ok, 1. wird der Pointer initialisiert und 2. funktionieren damit die Kontrollstrukturen. D.h., einif(string)
würde immer wahr ergeben wennstring = ""
(Leerstring) ist und das ist schlecht. Mit 0 initialisiert hingegen klappt das einwandfrei.
In C gibt es auch keine Strings, sondern nur Arrays von Zeichen – und ein Array ist letztlich nur ein Pointer auf die erste Position der Elemente. Als „String“ wird ein Zeichenarray betrachtet, dessen letztes Zeichen 0 ist. Daher ist ""
auch ein Zeichenarray der Länge 1, bestehend aus dem NULL-Byte und mit einer von 0 unterschiedlichen Position im Speicher. Dein Vergleich if(string)
müsste daher in C heißen
if (strlen(string)) {
/* … */
}
Gleichermaßen verhält es sich mit den Rückgabewerten von Funktionen wenn das Stringspointer sein sollen
char *func(){}
. So gibt es einreturn 0;
wenn meine Funktion beim Durchlaufen einer verketteten Liste den gesuchten String nicht gefunden hat ansonsten einen Zeiger auf den String.
Vorsicht:
char* func(char *arg) {
char intern[23];
static char ext[42];
char *dynamic = (char*) malloc(42);
/* Führt zu undefiniertem Verhalten, weil die Variable nur im Scope der Funktion existiert:
* return intern;
*/
/* Funktioniert, erfordert aber ggf. eine Kopie des statischen Strings:
* return ext;
*/
/* Funktioniert, String muss aber nach Verwendung freigegeben werden um Memoryleaks zu vermeiden:
* return dynamic;
*/
return 0;
}
Viele Grüße
Robert