Hi,
Carsten Friede Carsten Friede macianer@online.de:
Ich würde dem Aufruf einen void-Pointer mitgeben, der das Ergebnis zurückliefert (Zahlenwerte sind der Wert des Pointers und bei Strings ist der Pointer die Anfangsadresse) und der Rückgabewert der Funktion (z.B. ein enum) legt fest, wie der Pointer interpretiert (gecastet) wird.
Kannst du das etwas genauer erklären, ich kann mir das nicht so gut vorstellen. Danke.
Hm, um die Zeit noch kodieren, mal sehen ... ;-)
typedef enum { eRT_INVALID, eRT_SHORT, eRT_LONG, eRT_CHAR, eRT_STR } TE_RT;
TE_RT reader(void *ptr) { char pInpStr[255]; TE_RT eRc = eRT_INVALID; readFromKeyboard(pInpStr); cutWithStrtok(pInpStr); eRc = decideIfShortLongCharStrAndLoadDataIntoPtr(pInpStr,ptr); return eRc; }
int main(int argc, char **argv) { void *ptr = NULL; switch (reader(ptr)) { case 'eRT_INT': printf("input: %d\n", (int)ptr); break; case 'eRT_LONG': printf("input: %ld\n",(long)ptr); break; case 'eRT_CHAR': printf("input: %c\n", (char)ptr); break; case 'eRT_STR': printf("input: %s\n", (char*)ptr); break; case 'eRT_INVALID': printf("Error\n"); break; } return 0; }
Der Inhalt des void-Pointer ist entweder ein Wert oder die Adresse des Zeichenvektors. Das Beispiel ist ungetestet.
Freundlich grüßend,
Erik