Zugriffsverletzung
-
Jansen schrieb:
String mList = mediaList->Items->Text; int pos = mList.LastDelimiter(" "); String id = mList.SubString(pos + 1, mList->Length() - pos);Et voila!
Naja, leider bekomme ich hier jetzt
[C++ Fehler] Unit1.cpp(52): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich*
-
Das muss natürlich mList.Length() heissen.
Ein bischen Mitdenken ist nicht drin?
-
Joe_M. schrieb:
3. Einfacher wäre es mit:
char* blablabla = AnsiString::c_str();
Dabei mußt Du dann nicht mal den Speicher für den char* mit new reservieren. Und auch nicht wieder freigeben.Eher ein Irrglaube... lies doch schnell den Hinweis in der FAQ zu dem Thema...
Der Ansatz war absolut richtig.-junix
-
Hi,
danke, tut mir leid.
Bin eigentlich C#-Coder, so dass ich solche Feinheiten sehr gerne übersehe...

-
HAMMER:
Du glaubst gar nicht, was du mir durch diese Funktion abgenommen hast. DANKE!!!!
Mein Code ist dadurch um einiges kürzer geworden. Super...
-
junix schrieb:
Joe_M. schrieb:
3. Einfacher wäre es mit:
char* blablabla = AnsiString::c_str();
Dabei mußt Du dann nicht mal den Speicher für den char* mit new reservieren. Und auch nicht wieder freigeben.Eher ein Irrglaube... lies doch schnell den Hinweis in der FAQ zu dem Thema...
Der Ansatz war absolut richtig.Das sehe ich anders. Laut Hilfe ist der Zeiger bis zum Ende der Anwendung gültig. Natürlich kann der Zeiger ungültig werden, aber in der gegebenen Routine bezweifle ich das.
-
char* blablabla = AnsiString::c_str();Wenn man sowas im Windows Quellcode finden würde wäre vollkommen klar, warum das Teil sich manchmal von der blauen Seite zeigt :p
-
Ihr braucht mir ja nicht zu glauben, probiert es doch einfach aus!
-
char blablabla = AnsiString::c_str();*
läßt sich nicht compilieren, wenn dann müßte man schon so schreiben:
char blablabla = AnsiString().c_str();*
Dadurch wird aber kein Speicherplatz allokiert, woher soll er auch wissen wieviel benötigt wird. Kopiert man in so einen String/Pointer was rein geht das oft auch gut da dann warscheinlich nichts kritisches im Speicher überschrieben wird. Macht man aber z.B. sowas:
memset(blablabla, 'x', 1000);
läuft das Programm aller Voraussicht nach nicht mehr ganz so geschmeidig.
-
@Peter:
Entschuldige bitte, aber lies erst die Postings komplett, bevor Du Kommentare dazu schreibst. Ich habe bloß die Klasse und die zu verwendende Funktion angegeben, da ist dann AnsiString::c_str() hoffentlich ausreichend. Ich bin davon ausgegangen, dass auch die Anfänger hier in der Lage sind ein Objekt des Typs AnsiString zu instanzieren.Für Dich dann im Klartext:
AnsiSting asTemp; char* pcTemp; pcTemp = asTemp.c_str();Dieser Zeiger darf natürlich nur und ausschließlich für Leseoperationen verwendet werden. Aber mehr war in dem Thread ja auch nicht verlangt. Er wollte den char* auswerten nicht ihn modifizieren.
Um die Länge eines chars zu ermitteln gibt es dann auch noch strlen(), aber wie gesagt, das ist ein anderes Thema.
-
@Joe_M
Hab mir übrigens die Postings schon durchgelesen aber erst jetzt verstanden was Du ausdrücken wolltest ***hmpfundsorry***
Hoffe skydiver1983 ging es nicht so wie mir
-
keine sorge, ich komme schon lange nimmer mit bei der Diskussion...
ich habe das, was ich wissen wollte...Gruß
skydiver1983
-
Was versteht ihr denn nicht?
Hakt doch bitte nach, wenn ihr was nicht versteht. Es nützt euch doch gar nichts, wenn ihr nur abtippselt was andere posten. Schließlich wollt ihr doch was lernen, oder nicht?