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