string nach const char nach char array
-
Ah Danke.Das hat mir schon super geholfen.Jetzt müsste ich nur noch wissen,wie ich den Speicher eines Arrays freigeben kann, ohne direkt die Variable zu löschen.Wollte zuerst mit einer Schleife, jedem Speicherblock ein Leerzeichen übergeben (Array[i]= " ") aber da mekert er.
-
Welchen Speicher meinst du denn? Den hinter c_str() mußt du nicht freigeben, das macht der String schon selber (spätestens wenn er aus dem Scope fällt).
-
Ich habe einen char Array c[30] den ich zuvor den Inhalt des const Char name übergeben habe
char c[100]; int i=0; while(name[i]!='\0') { c[i]= name[i]; i++; }Nun würde ich gerne den Inhalt von c[100] löschen, ohne direkt die ganze Variable zu löschen.
-
Hi,
also ich würde das
- gar nicht machen. "Löschen" - was meinst Du damit ? Alle Chars auf '\0' setzen ? Speicher freigeben ? ... ?
Speicher freigeben kannst Du bei statischen Arrays gar nicht (außer durch Verlassen des Scopes). - kopieren nicht nachprogrammieren; Warum nicht einfach "copy ?
- Ansonsten: Einfach mit dynmischer Speicherverwaltung:
string name = "Irgendwas steht hier drin"; char* dynamischesArray; dynamischesArray = new char[name.length()+1]; // 0-Zeichen nicht vergessen // warum eine eigene Schleife, wenn es das schon gibt ? copy(name.begin(), name.end(), dynamischesArray); // Hier kann ich dynisches Array verwenden, wie ich will // ... ggf. Inhalt wieder in name zurückkopieren // ... und zum Schluss Speicher freigeben delete[] dynamischesArray;Aaaaaber: Kopie brauchst Du nur, wenn Du wirklich etwas ändern willst - ansonsten tut's auch name.c_str();
Gruß,
Simon2.
- gar nicht machen. "Löschen" - was meinst Du damit ? Alle Chars auf '\0' setzen ? Speicher freigeben ? ... ?
-
Also wenn ich es so mache
string name; while (getline(*pIFStream,name)) { char* dynamischesArray; dynamischesArray = new char[name.length()+1]; copy(name.begin(), name.end(), dynamischesArray); ShellExecute(0,"open",dynamischesArray,0,0,SW_SHOWNORMAL); delete[] dynamischesArray; }klappt es nicht.
Daher wollte ich es so machen:
char Adresse[30]; string name; while (getline(*pIFStream,name)) { char c[100]; int i=0; while(name[i]!='\0') { c[i]= name[i]; i++; } int j=2; int a=0; while (c[j]!='\0') { Adresse[a]=c[j]; j++; a++; } ShellExecute(0,"open",Adresse,0,0,SW_SHOWNORMAL); Sleep((c[0]*100)); for (int l=0;l<30;l++) { Adresse[l]=leer; // hier sollte freigegeben werden }Das Array soll gesplittet werden, da in der textdatei die zuvor eingelesen wird, die erste Stelle eine Zahl ist,die zweite eine leerzeile und ab der dritten kommt eine Internetseite.Da die Seiten allerdings unterschiedlich lang sind, kommt es schonmal vor,dass am Ende einer Seite noch zusätzliche Zeichen dranhängen. Beispiel: www.amazon.de= 13 Zeichen , www.ebay.de =11 Zeichen = www.ebay.dede
-
Was genau meinst du mit "klappt nicht"? Vermutlich hast du nur vergessen, die Null-Terminierung einzuarbeiten, bevor du das char-Array als C-String verwendet hast.
-
Mit klappt nicht meine ich, dass die Internetseite nicht aufgerufen wird.
Habe aber mal ein cout gemacht und festgestellt, dass wie du schon sagst, die Terminierung am Ende fehlt.Es werden nämlich hinter der Seite jede Menge @ ausgegeben.Aber kann ich das vom obigen Beispiel enthaltene dynamische Array genauso behandeln wie ein normales char Array,also auf die einzelnen Speicherblöcke zugreifen können?
-
B.D schrieb:
...kann ich das vom obigen Beispiel enthaltene dynamische Array genauso behandeln wie ein normales char Array,also auf die einzelnen Speicherblöcke zugreifen können?
Japp.
Der Speicher für das dynamische Array wurde nur anders besorgt - das Handling ist gleich.Gruß,
Simon2.
-
Kann mir jemand helfen den Terminator bei diesem Code einzufügen?Ich probiers und probiers aber krieg es einfach nich hin.Ich werd noch wahnsinnig

string name; while (getline(*pIFStream,name)) { char* dynamischesArray; dynamischesArray = new char[name.length()+1]; copy(name.begin(), name.end(), dynamischesArray); ShellExecute(0,"open",dynamischesArray,0,0,SW_SHOWNORMAL); delete[] dynamischesArray; }
-
Geht's nicht so ?
string name; while (getline(*pIFStream,name)) { char* dynamischesArray; dynamischesArray = new char[name.length()+1]; copy(name.begin(), name.end(), dynamischesArray); dynamischesArray[name.length()] = '\0'; // <--- ShellExecute(0,"open",dynamischesArray,0,0,SW_SHOWNORMAL); delete[] dynamischesArray; }
-
Ahhh ich danke dir.Du hast mich beruhigt

Die Zeile ist eigentlich logich,aber irgendwie fällt mir das nie ein.
-
Soo,jetzt müsste ich da ganze nur noch Linux kompatibel machen.Da ich mich mit Linux überhaupt nicht auskenne geschweigedenn jemals dafür etwas programmiert habe,bräuchte ich dringend Hilfe.
void CTextdatei::ausgeben() { int i=0; string name; int Zeit; int j=2; while (getline(*pIFStream,name)) { //Dynamischer Speicher wird angelegt char* dynamischesArray; char* Puffer=new char[30]; dynamischesArray = new char[name.length()+1]; copy(name.begin(), name.end(), dynamischesArray); dynamischesArray[name.length()] = '\0'; Zeit=dynamischesArray[0]; j=2; for (int i=0;i<30;i++) { //Nur die Adresse(ab Stelle 3) ohne Zeit wird übergeben Puffer[i]=dynamischesArray[j]; j++; }Da ich ja die Windows.h datei eingebunden habe,denke ich mal,dass es nicht unter Linux funktionsfähig ist

Durch was kann ich nun die Funktionen von Windoes durch in Linux enthaltene Funktionen ersetzen?Ist fStream in Linux kompatibel?Vielen Dank schonmal für die Mühe

-
Solange Du nur Standardfunktionen genutzt hast ist das ganze automatisch Linuxkompatibel (deshalb "Standard"). Welche Funktionen Du aus windows.h nutzt, musst Du allerdings selbst wissen, bevor man Dir sagen kann wodurch man sie ersetzen könnte. In dem geposteten Abschnitt sehe ich jedenfalls keine WinAPI-Aufrufe.
-
Hatt ausversehen einen Abschnitt vergessen
ShellExecute(0,"open",Puffer,0,0,SW_SHOWNORMAL); Sleep(Zeit*100); //Speicher wird wieder freigegeben delete[] dynamischesArray; delete[] Puffer;ShellExecute und Sleep denke ich mal sind nicht kompatibel.Aber ich hab ka,wie ich die ersetzen kann.Außerdem weiß ich nicht, wie ich das Programm nachher so kompilieren kann,dass es keine EXE ist,sondern Etwas,was unter Linux läuft(und das weiß ich leider auch nicht) .