char array Übergabe läuft falsch
-
auch wenns jetzt krass wirkt, aber ich achte auf die Dateigröße :o
und iostream ist einfach wahnsinnig groß. leider ändert das nix am ergebnis
EDIT: und ich bin zu blöd um string mit einzubauen

der gibt mir dann nen fehler bei strcmp
-
für befehl wird nur ein Byte reserviert, und dann wird lustig dahinter rumgeschrieben.
Edit:
Sieh zu, dass Du mit string klar kommst, dann passiert sowas auch nicht.Zu 1. Warum s t a n d a r t zensiert wird, weiß ich auch nicht, wo es doch eine Möglichkeit, sich hinzustellen, beschreiben soll.
-
Belli schrieb:
für befehl wird nur ein Byte reserviert, und dann wird lustig dahinter rumgeschrieben.
wie kann ich das verhindern?
-
Was verhindern?
-
dass lustig dahinter rumgeschrieben wird.
-
Ausserdem wird kein Nullbyte in den String, auf den befehl zeigt, geschrieben. Also nochmal: nimm string, oder programmiere in C.
-
Clundsch schrieb:
dass lustig dahinter rumgeschrieben wird.
Indem Du nur befehl[0] beschreibst. befehl[1] gehört Dir ja schon nicht mehr.
-
du mischt C und C++.
printf, new, delete,...Entscheide dich für eine Sprache.
Standard heiß es übrigens.Außerdem empfehle ich dir dringend die Benutzung von std::string (also C++).
Dann passieren auch nicht so Fehler wie schreiben in einen Speicherbereich, der einem nicht gehört. Du reservierst exakt 1*sizeof(char), und dann schreibst du x Zeichen dorthin. Reservier da mal lieber mehr, dafür gibts new[], oder aber du steigst auf Klassen um, die sich selbst um den Speicher kümmern, wie eben std::string.Als Anfänger sollte man sich nicht um möglichst kleine Binärdateien kümmern, sondern um möglichst korrekten Code!
-
EDIT: und ich bin zu blöd um string mit einzubauen

der gibt mir dann nen fehler bei strcmpdas liegt daran, dass sich strcmp um die alten C Strings kümmert, und nicht um die "neuen" C++ std:string's. Dafür gibts die Methode compare.
-
gut. auf string bin ich jetzt umgestiegen. jetzt hab ich den code:
int main() { Standart standart; string eingabe; while(1) { cin>>eingabe; if(eingabe == "exit") exit(0); string befehl = eingabe; befehl.erase( strchr(eingabe, ' ') , eingabe.end()); } return 0; }und den fehler:
error: cannot convert 'std::string' to 'const char*' for argument '1' to 'char* strchr(const char*, int)'und der zeigt auf die Zeile mit dem strchr
jetzt bin ich total verwirrt
was soll ich machen?
-
Natürlich kannst du nicht einfach C-Stringfunktionen auf deinen
std::stringanwenden. Schaue mal auf www.cppreference.com an, welche Methoden einstd::stringso anbietet...Übrigens:
std::exit()ist schlecht, da es nicht sauber aufräumt. Gerade inmain()kannst du sowieso einreturnbenutzen. Ausserdem dürfen Typen und ihre Variablen nicht gleich heissen, wenn sie im gleichen Scope verwendet werden.
-
ja, das mit dem return hab ich ganz vergessen.
und ich Idiot hab aus Versehen bei den c-strings nachgeguckt anstatt bei den c++ strings
allerdings komm ich einfach nicht weiter. ich will lediglich einen teil aus dem ersten in den zweiten string kopieren.
genauer gesagt will ich alles aus dem ersten string bis zum ersten Leerzeichen in den zweiten string kopieren. wie macht man das?
-
Zuerst mit
std::string::find()(oder einer der 7 Varianten) nach dem Leerzeichen suchen und dessen Index merken. Somit kennst du das Intervall der Zeichen, die du kopieren musst (nämlich[0,index[). Zum Kopieren hast du verschiedene Möglichkeiten, unter Anderem:std::copy(), wenn du genau gleich viele Zeichen des 2. Strings überschreiben willst (Länge von String 2 bleibt gleich)std::string::insert(), wenn die Zeichen eingefügt werden sollen (Länge 2 += Länge 1)std::string::assign()oderstd::string::operator=mitstd::string::substr(), wenn der ganze 2. String neu zugewiesen werden soll (Länge 2 = Länge 1)
-
Clundsch schrieb:
genauer gesagt will ich alles aus dem ersten string bis zum ersten Leerzeichen in den zweiten string kopieren. wie macht man das?
Zuerst stellst Du fest, an welcher Position das Leerzeichen ist. Dafür gibts die Methode
std::string::find
oder
std::string::find_first_ofDann schneidest Du den entsprechenden Teilstring heraus und weist ihn dem neuen String zu, dafür bietet string die Methode substr.
Also etwa:
string alterString("hallo Duda"); size_t pos = alterString.find(' '); string neuerString = alterString.substr(0, pos);einfach mal hier:
http://cplusplus.com/reference/string/string/
nachsehen, was alles so angeboten wird.Edit:
Nach dem find sollte man natürlich zuerst prüfen, ob überhaupt erfolgreich gesucht wurde und dementsprechend reagieren.
-
Belli schrieb:
einfach mal hier:
http://cplusplus.com/reference/string/string/
nachsehen, was alles so angeboten wird.ja da lese ich schon die ganze zeit fleißig

danke, ich habs mir bisher nicht so zusammenreimen können, war zwischenzeitlich aber nah dran