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 FormatDas 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
MichaWenn 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!