strcpy verursacht Programmabsturz // Benutze eine char*
-
Jud4s schrieb:
was ist an meinem Qc denn noch alles an C-Teilstücken drinne die ich verändern sollte.... (um halt ein Lupenreines Cpp zu erhalten)......
Eigentlich nur
char*und diestr...-Funktionen.coutundcingehören zu den Streams, das ist C++ und somit in Ordnung
Und zu
std::stringwürde ich dir sowieso raten, es bietet nicht nur mehr Funktionalität, sondern auch mehr Sicherheit und eine einfachere Anwendung.@ David_pb: Danke für die Erklärung von strcmp(). Obwohl ich diese Funktion so gut wie nie brauche, ist das interessant zu wissen. Die Abfrage auf Negation liess mich auf einen bool-Rückgabewert schliessen, deshalb war ich etwas verwirrt.
-
Hauptsächlich dein char-Array durch std::string ersetzen und den Vergleich über die Vergleichsoperatoren, nicht durch stricmp, ausführen. Aber wie gesagt... Es ist kein Muss.
-
keyy.. aber findet ihr nicht das in diesem falle die strimcp funktion wirklich mehr funktionalität bietet... ich kann das was ich machen will, (der vergleich von zwei strings ohne beachtung von gross und kleinschreibung) innerhalb eines Befehls machen. Mit der von euch vorgeschlagenen Möglichkeit habe ich nicht diese "Benutzerfreundlickeit".....oder?
-
std::string kannst du in die tonne kloppen.
-
David_pb schrieb:
Aber wie gesagt... Es ist kein Muss.
Aber ein Soll

Vor allem langfristig wirst du froh sein, wenn du
std::stringnutzen kannst. Kennen musst du es früher oder später sowieso, weil es auch in einigen Bibliotheken verwendet wird.Jud4s schrieb:
keyy.. aber findet ihr nicht das in diesem falle die strimcp funktion wirklich mehr funktionalität bieted... ich kann das was ich machen will (der vergleich von zwei strings ohne beachtung von gross und kleinschreibung) innerhalb eines Befehls machen, mit der von euch vorgeschlagenen Möglichkeit habe ich nicht diese "Benutzerfreundlickeit".....oder?
Doch, du kannst es sogar noch benutzerfreundlicher mit dem Vergleichsoperator == machen:
if (string1 == string2) // wobei string1 und string2 vom Typ std::string sindOder willst du unbedingt eine bool-Funktion, an die du zwei Strings übergeben kannst? Die wäre ja sehr schnell selber geschrieben.
ja schrieb:
std::string kannst du in die tonne kloppen.
Wieder einmal ein sehr hilfreicher Beitrag. Wenn du wenigstens Argumente hättest...

-
@Nexus:
Es geht ihm eher um einen caseinsensitiven Vergleich.
-
bei == wird da nicht auf gross und kleinschreibung geachtet??? Ihc meine schon.... sonst nehme ich das mit Kusshand... alleine weil es sich besser und verständlicher lesen lässt.....
-
Jud4s schrieb:
bei == wird da nicht auf gross und kleinschreibung geachtet??? Ihc meine schon.... sonst nehme ich das mit Kusshand... alleine weil es sich besser und verständlicher lesen lässt.....
So ist es.
Aber zur Not geht ja noch:if ( !stricmp( axt.c_str(), "axt" ) ) { }
-
David_pb schrieb:
@Nexus:
Es geht ihm eher um einen caseinsensitiven Vergleich.
Sorry, stimmt ja. Irgendwie scheine ich heute nicht ganz bei der Sache zu sein

David_pb schrieb:
So ist es.
Aber zur Not geht ja noch:if ( !stricmp( axt.c_str(), "axt" ) ) { }Du solltest einfach bei Umlauten etc. aufpassen. Ich denke, die werden nicht automatisch umgewandelt bzw case-insenstive verglichen. Falls du die auch noch berücksichtigen willst, wäre eine eigene Funktion schon angebracht.
Bei der "Axt" geht ja noch alles gut, ich wollte das einfach mal sagen; nicht dass du später deswegen Probleme bekommst.
-
thx.... dieses Problem ist gelöst..... thx @ all
aber nun habe ich ein neues.....

und um dafür kein neues Thema aufzumachen poste ich es mal hier^^:diese Objekterstellung : player enemie(90,140,"Magus","Magier",1,1,8,45,false,"Ja","Schwert")
soll diesen Konstruktor aufrufen:player::player(int hp, int mp ,string fn, string cc, int ccv, int AnzWa, int SchaWa, int trefwahr, bool zh, string schild, string waffe): Hp ( hp ), MaxHp ( mp ), Mp ( 100 ), MaxMp ( 100 ), charclass ( cc ), name ( fn ), charclassvari ( ccv ), playersown (AnzWa,SchaWa,trefwahr,zh,schild,waffe )playersown ist wiederum eine Objekt einer Klasse ^^ mit dem Konstruktor
weaponset::weaponset(int AnzWa, int SchaWa, int trefwahr, bool zh, string schild, string waffe): AnzahlWaffen ( AnzWa ), SchadenProWaffe ( SchaWa ), Zweihandwaffe ( zh ), treffwarscheinlichkeit ( trefwahr ), schildj ( schild ), waffe ( waffe )nu kommt aber das Problem das der Compiler nicht erkennt das "Magus" und die ganzen anderen Zeichenketten strings sind.... er denkt das wären chars... -.- ... und ich habe keinen Blassen dunst wie ich ihm verdeutlichen soll das das strings sind.... (sind die Quellcodes von nöten oder soll ich sie der übersichtshalber wieder löschen?)
PS: ich weiss nciht ob es verständlich war....
playersown gehört zu Klasse weaponset
und enemie zur Klasse playeralso playersown constructor <----- enemie.playersown.weaponset(....)
-
Er sollte dir das schon in Strings konvertieren. Du hast schon <string> inkludiert, oder? Und du hast den Namespace std auch bekannt gemacht, oder?
Ansonsten zeig mal den Fehler her. Das ist sonst reines raten.

-
Der Parametertyp ist eindeutig (du verwendest ja nur einen Konstruktor, oder?), es gibt keinen Grund dazu, "Magus" und die anderen Zeichenketten als Char-Arrays zu erkennen. Wieso meinst du, sie werden so erkannt? Könntest du vielleicht die Fehlermeldung posten?
Im Notfall übergibst du eben z.B.
string("Magnus")statt"Magnus". Doch ich denke, der Fehler liegt woanders.
-
Fehlermeldung -> no matching function for call to `player::player(int, int, const char[6], const char[7], int, int, int, int, bool, const char[3], const char[8])'
canidates are: player::player(std::string, std::string, int, int, int, int, bool, std::string, std::string)
das ist die Fehlermeldung... sprich er erkennt die strings als chars und fnidest somit den constructor nicht....
-
Ich würde sagen, dass der Fehler immernoch wo anderst liegt.
canidates are: player::player(std::string, std::string, int, int, int, int, bool, std::string, std::string)Macht für mich keinen Sinn, da du ja (int, int .. ) am Anfang hast.. Zeig mal den genauen Aufruf und die Deklaration.
-
ohh mann.. schande bin ich bräsig... das ist der Fehler es funktioniert nun.... vielne Dank^^
-
Jud4s schrieb:
ohh mann.. schande bin ich bräsig... das ist der Fehler es funktioniert nun.... vielne Dank^^
Langsam werde ich richtig gut im raten..

-
Nexus schrieb:
ja schrieb:
std::string kannst du in die tonne kloppen.
Wieder einmal ein sehr hilfreicher Beitrag. Wenn du wenigstens Argumente hättest...

Weißt du das immer noch nicht. Jede zweite Methode (replaceAll, compareIgnoreCase, toUppper für den ganzen String...) muss von jedem Programmierer immer wieder neu implementiert werden. Nicht UNI-Code fähig...
-
Mir ging es nur darum, dass dein Beitrag stark nach Spam aussieht und dessen Inhalt so niemandem hilft. Hättest du es begründet, dann hätte ich auch kein Problem damit gehabt.