Pointer aus String extrahieren...



  • Hallo Leute,
    ich habe ein C Programm das von einem anderen Programm einen Pointer
    im C-String-Format(char 😉 übergeben bekommt z.B. "0x000111..."

    Gibt es eine Möglichkeit daraus wieder einen char-pointer zu machen um
    auf den Inhalt des Pointers zugreifen zu können...

    Mein Ansatz war folgender:

    char * tmp = atoi(ptrStr);
    printf("%s",tmp);
    

    Leider liefert atoi nur NULL zurück atol() geht leider auch nicht...

    kann mir jemand weiterhelfen?

    grüße
    Micha



  • Hallo MK_85,

    erstmal herzlich willkommen im Board.
    Schau doch mal was bei ptrStr steht? Möglicherweise keine Ascii Zahlen.

    printf("%s", ptrStr);
    


  • Hallo Bommel,
    es stehen die richtigen ASCII Zeichen in dem String...
    z.B.: 0x14F3943 oder so ähnlich ... die Speicheradresse im Hex Format

    Das Gegenstück wie der Pointer ins char * Format gewandelt wird sieht
    so in der Art aus:

    sprintf(sendStr,"%p", string);
    

    Grüße
    Micha



  • mk_85 schrieb:

    Das Gegenstück wie der Pointer ins char * Format gewandelt wird sieht
    so in der Art aus:

    sprintf(sendStr,"%p", string);
    

    Grüße
    Micha

    Wenn du das umkehren willst, schau dir mal sscanf() an.
    (aber ob die Adresse außerhalb des Kontexts, in dem sie entstanden ist, noch eine Bedeutung hat, ist fraglich)



  • Kanns grad nicht testen, aber vllt geht das:

    char * p = (char*)strtol(str, NULL, 16);
    


  • @this->that
    In meinem Testprogramm hats funktioniert. Herzlichen Dank, werde es
    gleich morgen ins große Projekt einbauen!

    @CStoll
    Danke für den Tipp mit sscanf()

    Der Zusammenhang ist folgender ich muss einen String zwischen zwei
    Programmen transportieren. Die bisherige Schnittstelle ist ein Shared
    Memory Segment. Die Struktur des SHM sieht nur die Übergabe eines Strings
    mit kurzer Länge vor. Eine Änderung dieser Struktur wäre sehr aufwendig.

    Deshalb kam ich auf die Idee im Senderprogramm Speicherplatz für einen String
    mit malloc zu beschaffen und den Pointer selbst auch als String zu verschicken.

    Im Empfangsprogramm den String auf den der Pointer zeigt ausgeben und den Speicherplatz wieder
    freigeben...

    ist das ne unsaubere Lösung? andere Vorschläge?



  • mk_85 schrieb:

    Deshalb kam ich auf die Idee im Senderprogramm Speicherplatz für einen String
    mit malloc zu beschaffen und den Pointer selbst auch als String zu verschicken.

    Im Empfangsprogramm den String auf den der Pointer zeigt ausgeben und den Speicherplatz wieder
    freigeben...

    ist das ne unsaubere Lösung? andere Vorschläge?

    Also sauber ist das nicht - und vermutlich versteht das Zielprogramm etwas völlig anderes hinter der übergebenen Adresse als das Quellprogramm (oder löst sogar einen SegFault aus beim Versuch, den String zu lesen).

    Wenn dein System nicht dazu ausgelegt ist, einen längeren String am Stück zu übertragen, solltest du ihn lieber in handliche Stücke zerteilen und jedes davon einzeln senden. Das ist sicherer.



  • Ja leider ist es so das die beiden Programme nicht auf den
    selben virtuellen Speicher zugreifen...deshalb funktioniert
    das nicht. Ich musste jetzt doch die Struktur des Shared Memory
    umbauen, aber damit habe ich eine saubere und gut funktionierde Lösung.

    Herzlichen Dank an alle Beteiligten!


Anmelden zum Antworten