2016-05-26 30 views
1

Ich speichere einen Wert im Zeiger storeName, aber wenn ich später im Programm mit einem Rückruf versuchen, storeName ist leer. Ich glaube, es ist bz name in parent Funktion ist lokal. Ändern parent Funktion ist nicht in meiner Kontrolle. Was ist der beste Weg, um Wert in storeName in setName Funktion zu speichern, so storeName kann später verwendet werden.Speichern eines Zeigerwerts für die spätere Verwendung

void parent() 
{ 
    uint8_t name[] = "James"; 
    setName(name); 
} 

static uint8_t* storeName; 

void setName(uint8_t* name) 
{ 
    storeName = name; 
} 

... an einem anderen Punkt im Code

//*storeName is empty 

(Hinweis: über Code eine vereinfachte Version ist nur das Problem bei der Hand zu erklären)

+2

storeName ist kein Zeiger. "James" ist keine 8-Bit-Ganzzahl. Dieser Code ist sehr merkwürdig. –

+0

Entschuldigung, es war ein Tippfehler. jetzt behoben – vow

+2

Das gleiche gilt für 'name' in' parent' - dem Typ fehlt ein '*'. –

Antwort

3

Sie vorbei die Adresse einer lokalen Variablen. Das Array name in parent verlässt den Gültigkeitsbereich, sobald parent beendet wird, sodass der Zeiger, der auf diese Variable zeigt, jetzt auf einen nicht angegebenen Speicherort zeigt und der Zugriff darauf zu undefiniertem Verhalten führt.

Wenn Sie name wie folgt definieren:

uint8_t *name = "James"; 

Dann zeigt er auf eine konstante Zeichenfolge, die nur in einem Leseabschnitt des Speichers lebt, die sicher außerhalb der Funktion gelesen werden kann. Dies unterscheidet sich von der vorherigen Deklaration dadurch, dass die konstante Zeichenkette verwendet wurde, um ein Array zu initialisieren, wobei Sie in diesem Fall einen Zeiger auf die tatsächliche Konstante haben.

+0

Dies funktioniert mit gcc. Call gibt jedoch die folgende Warnung aus: 'warning: Initialisierung von 'uint8_t *' (alias 'unsigned char *') mit einem Ausdruck des Typs 'char [6]' konvertiert zwischen Zeigern in Integer-Typen mit anderen Zeichen [-Wointer- sign] uint8_t * name = "James"; ' – user3078414

Verwandte Themen