On 30.08.2010 15:59, lano wrote:
Nathanael Schweers schrieb:
On Mon, 30 Aug 2010 14:36:09 +0200
lano <[email protected]> wrote:

*-------net.c------*
#include <stdio.h>
#include <string.h>
#include <net/if.h>
#include <netinet/in.h>
#include <sys/ioctl.h>

#define BUFSIZE 60

unsigned char *get_mac(void) {
int sd;
struct ifreq ifr;

struct ifreq ifr;  ist lokal da du es innerhalb von get_mac definiert hast

buffer = (unsigned char *) &ifr.ifr_hwaddr.sa_data;

Hier setzt du den Wert von deinem buffer auf die Adresse von ifr das ja lokal ist.
angezeigt------* return buffer;

Hier gibst du einen Pointer zurück der als Wert eine Adresse auf eine lokale Variable hat.

Da das die Adresse von einer lokalen Variable ist kannst du außerhalb nichts mit der Adresse anfangen die in dem zurückgegebenen Pointer steht. Das liegt daran, dass Variablen die in Funktionen definiert werden auf dem Stack liegen und der Speicherbereich auf den der Pointer zeigt nach dem Aufruf undefiniert ist.

Bücher vermitteln Grundlagen und sind meistens recht gut aufgebaut. Wenn du lieber mit Code spielst, was auch sehr wichtig ist um eine Programmiersprache zu lernen, solltest du dennoch vieleicht mit einfachen Programmen beginnen die gewisse C eigenheiten vermitteln.

Hoffentlich klinge ich jetzt nicht wie ein Oberlehrer oder sowas - ist nicht meine Absicht!

Scheib dir z.B. ein Programm in dem du die Gültigkeit von Variablen (lokal/global) ausprobierst. Aanschließend noch eins in dem du call by value und call by reference verwendest. Irgendwas mit Pointer Arithmetic z.B. ein char Array damit zu kopieren ist warscheinlich auch nützlich.

Danach hast du es leichter und bist bei größeren Programmen nicht gefrustet :)

Viel Spaß weiterhin
Bernhard

--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an