PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem: String in Char wandeln



ufosworld
10-05-2007, 15:10
folgendes Problem:

ich habe eine verkettete Liste in der String Variablen gespeichert werden.

Eine Variable ist ein Modulname den ich mittels dlopen während der Laufzeit reinladen möchte... also das Modul

nur ist die Syntax von dlopen

> dlopen(const char *filename, int flag)

ok kein Problem dachte ich mir

wandel ich halt die string Variable aus meinem Struct in eine Char Variable um

struct TModulK
{
....
string mod_name;
.....
};

dann weiter im Quelltext:

3 char* Filename;

4 TModulK* LoadModul;

5 Filename = malloc(strlen(LoadModul->mod_name)+1);

6 memcpy (&Filename,LoadModul->mod_name, strlen(LoadModul->mod_name));

7 void* handle=dlopen(filename,....)

....

wenn ich nun kompiliere motzt er in den Zeilen 5 und 6 und 7....
ok gekuckt... malloc Parameter passen... mhhh strlen....

na toll

strlen(const char *s) aber ich versuche ja die Länge von nem String zu ermitteln...

es geht also nicht weil ich nicht die Länge von LoadModul->mod_name bestimmen kann, weil er einen char haben will und keinen String.... ^^
irgendwie dreh ich mich im Kreis...

hat jemand nen TIP??

mfg UFO

quinte17
10-05-2007, 15:29
machst du in C oder in C++ rum?
der typ string ist mir in C zumindest nicht geläufig...

kannst du ein kleines lauffähiges beispiel bringen? was sagt der kompiler im wortlaut?

greetz

ufosworld
10-05-2007, 15:36
in C++

und das Problem hat sich eben erledigt...

hab ja

char* Filename; gemacht

dann ein bischen gesucht...

und dann folgende Zeile eingefügt

Filename = LoadModul->mod_name.c_str();

dann wurschtelt der das intern in Char Array um

und ich kanns ohne langes hin und herkopieren bzw Veränderungsmüll
(Zeilen 5 und 6 kann man in die Tonne treten...)

in dlopen benutzen...

grüsse UFO

p.s. komisch is nur das er dieses c_str() nicht anzeigt wenn ich LoadModul->mod_name. schreibe.... normalerweise kommt dann nee Liste in KDevelop was alles zur Verfügung steht... kann man aktivieren oder is das KDevelop Ver. 2.1.3. in dieser hinsicht Schrott... hab leider kein höhreres Entwicklungssystem zur Verfügung...
Ab und zu wenn ich neue Listenmodul-Variablen einfüge, muss ich erst speichern und dann KDevelop neu starten, so das er mit eine aktuelle Liste bei
LoadModul-> anzeigt... ein MÜLL :-\

anda_skoa
10-05-2007, 18:37
Ich glaube, man kann weitere Verzeichnisse mit Headern hinzufügen, die dann für die Codevervollständigung herangezogen werden.

Ciao,
_

ufosworld
11-05-2007, 08:50
Ich glaube, man kann weitere Verzeichnisse mit Headern hinzufügen, die dann für die Codevervollständigung herangezogen werden.
_

und welche wären das? und wo muss ich die hinzufügen?

merci schon mal

UFO

anda_skoa
11-05-2007, 13:36
Ich schätze die Header sind irgendwo unter /usr/include/c++

Wo man das hinzufügt enzieht sich leider meiner Kenntnis :(

Ciao,
_