Ich versuche, ein Char * durch mehrere Funktionen zu analysieren (jeder extrahieren einen Teil der Nachricht) und habe Probleme beim Übergeben der Zeiger zwischen den Funktionen. In dem Teil der Nachricht, mit dem ich Probleme habe, gibt es eine Ganzzahl, gefolgt von einem Leerzeichen, gefolgt von einem Doppel.C: Übergabe und Rückgabe von Zeigern zu einem char *
Dies alles wird auf einem STM32F4 ausgeführt wird:
Hauptfunktion:
char* myMsg = NULL;
char* nLink = NULL;
SerialQueue_pop(&myMsg, &tablet_queue); //Extract a char* from a buffer
uint8_t id = extract_gset_id(myMsg, (char*)&nLink); //Extract the integer from the char*
real value = extract_gset_value((char*)&nLink); //Extract the real (float) from the char*
Funktionen:
int8_t extract_gset_id(char* message, char* pEnd)
{
char** ptr;
if ((strlen(message)-13)>0){
int8_t val = (int8_t)(0xFF & strtol(message+13, &ptr,10));
*pEnd = ptr;
return val;
}
return -1;
}
real extract_gset_value(char* message)
{
if ((strlen(message))>0){
char arr[8];
real val = strtod(message, NULL);
snprintf(arr, 8, "%2.4f", val);
return val;
}
return -1;
}
Der erste Funktionsaufruf eine ganze Zahl beginnend mit Zeichen 13 der Saite extrahieren soll . Das funktioniert gut, und wenn ich den Rückgabezeiger (nLink) nach dem Aufruf von strtol lese, zeigt er auf den richtigen Ort (an der Stelle rechts neben der Ganzzahl). Wenn ich jedoch eine Zeichenfolge aus dem Zeiger in meiner Hauptfunktion oder in der zweiten Funktion lese, zeigt sie nicht auf den richtigen Ort.
Was ich versuche zu tun, ist die Hauptfunktion übergeben einen Zeiger auf das Array, das von der ersten Funktion aktualisiert wird, dann die zweite Funktion nimmt diesen Zeiger und verwendet es.
Jede Hilfe wäre willkommen.
'char ** ptr;' erstellt einen unitären Zeiger auf einen char-Zeiger. Wenn Sie es dereferenzieren, haben Sie einen ungültigen Zeiger. Dies verursacht wahrscheinlich Ihr Problem. – kaetzacoatl
"*' real' * "? Hatten wir das in Turbo-C? – alk
@kaetzacoatl: 'ptr' wird durch den Aufruf von' strtol() 'gesetzt. – alk