Globaler char Array
-
Hallo,
Ich bin relativ neu in C++. Dieses Programm soll einen Substring aus einem Chararray ausgeben. Und ich habe eine frage wegen dem Globalen Array den ich für dieses Programm verwende.Kann ich die größe dynamisch erzeugen lassen? Habe es schon versucht mit char array[] = ""; aber dann kommt es endweder zu einem "Segmentation fault" Fehler oder es kommen nach dem Ergebnis irgendwelche komischen Zeichen raus.
Gibt es noch eine andere Möglichkeit oder ist es sogar Ok wenn ich bei so einem Programm die Größe begrenze?
Danke.
durchschittsuser#include <iostream> using namespace std; char* substr(int start, int end, char* chararray); char array[256] = ""; int main() { char* str; str = "Dies ist ein Test"; char* string = substr(0, 12, str); cout << "\"" << string << "\"" << endl; } char* substr(int start, int end, char* chararray) { int i = 0; //startposition wird angesprungen while(i!=start) { i++; chararray++; } //alle zeichen von start bis ende werden in array gespeichert int j = 0; while(i!=end) { array[j] = *chararray; chararray++; j++; i++; } return array; }
-
Hi,
wenn's dynamisch sein soll, dann mach es doch auch dynamisch ... und das Schlüsselwort bei dynamsicher Speicherverwaltung heisst nunmal "new":
#include <iostream> using namespace std; char* substr(int start, int end, char* chararray); char* array; int main(void) { array = new char[256]; char* str; str = "Dies ist ein Test"; char* string = substr(0, 12, str); cout << "\"" << string << "\"" << endl; delete[] array; }BTW: Globale Variablen sind oft ein Zeichen für schlechtes Design... besser, ohne auszukommen.
BTW2: der Segfault ist keine Überraschung: Mit
char array[] = "";bekommst Du nur ein Byte Speicher in die Hand ... und Du greifst bestimmt irgendwo auf einen Index>0 zu
BTW3: (D)Evils Hinweis ist natürlich richtig: string ist besser.....

Gruß,
Simon2.
-
#include <iostream> #include <string> int main() { std::cout << "SubStr gibt es schon! ;)" << std::endl; std::string test = "Dies ist ein Test"; std::cout << test.substr(0, 12) << std::endl; }...
-
Danke für eure Tipps. Habs gleich mal dynamisch gemacht.
Ich weiß das es Substring schon gibt. War nur ein Übungsprojekt.